如果引用了在 Maven 遠程倉庫中沒有的 jar 包,比如自己組使用的類包,或者是一些歷史遺留的包,在使用 Maven 構建過程中就容易遇到找不到類之類的問題。比如我遇到過的問題就有:
- 編譯時找不到 xxx 類
- 進行測試時找不到 xxx 類
針對這兩個問題的一些解決方法
編譯
只針對編譯的時候可以通過配置插件來設置擴展(即本地 jar)的位置,假設我們的 jar 包放在 lib 文件夾裏,配置例子如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<compilerArgs>
<arg>-extdirs</arg>
<arg>${basedir}/lib</arg>
</compilerArgs>
</configuration>
</plugin>
這裏配置 <compilerArgs>
,添加編譯參數 -extdirs ${basedir}/lib
測試
我暫時沒有發現通過配置 surefire 插件來解決測試時引入本地 jar 的方法,所以用別的方式,下面兩種方式都能解決編譯跟測試的問題
- pom.xml 中添加本地依賴
<project>
...
<dependencies>
<dependency>
<groupId>sun.jdk</groupId>
<artifactId>tools</artifactId>
<version>1.5.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
...
</project>
依賴配置中 scope
爲 system,systemPath
指定 jar 包路徑。不過這種引入依賴的方式已被標記爲過時的。
- 安裝本地 jar 包到本地倉庫
執行
mvn install:install-file -Dfile=lib/localjar-1.0.0.jar -DgroupId=org.group -DartifactId=localjar -Dversion=1.0.0 -Dpackaging=jar
就可以安裝 localjar-1.0.0.jar 到本地倉庫了,然後在 pom.xml 中添加依賴就行,配置和普通的依賴配置是一樣的。這裏的 groupId、artifactId、version 等都可以隨便指定的,只是影響本地倉庫生成目錄結構而已,pom.xml 增加依賴時保持一致就行。