有時候maven倉庫沒有的jar包,我們需要從本地址指定文件路徑並且指定scope爲system來引入依賴。默認的,assemble插件是不會把本地依賴的jar包打包進去的。
<dependency>
<groupId>*</groupId>
<artifactId>*</artifactId>
<version>*</version>
<scope>system</scope>
<systemPath>${basedir}\lib</systemPath>
</dependency>
assemble插件的配置中,可以指定打包結果輸出的根目錄和jar包存放目錄。
<!-- 根目錄 -->
<assembleDirectory>myDemo</assembleDirectory>
<!-- 打包的jar,以及maven依賴的jar放到這個目錄裏面 -->
<repositoryName>lib</repositoryName>
可以通過在pom文件中的build節點中單獨指定本地依賴jar包的存放路徑作爲資源,輸出目錄targetPath指定到我們打包後存放jar包的地址,這樣本地依賴的jar包就可以變相打進去了。這裏的地址是相對於本地依賴jar包裏面作爲目錄起點的相對位置。
<resources>
<resource>
<directory>${project.basedir}/lib</directory>
<targetPath>../../myDemo/lib</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
可能還有個問題,如果打包後生成啓動腳本,腳本里面有指定JVM啓動參數,裏面的CLASSPATH默認是指向所有依賴的jar包的,但不包括本地依賴的jar包,雖然我們打進去了,但是依賴不到,依然無法啓動。
CLASSPATH="$BASEDIR"/conf:"$REPO"/spring-boot-starter-2.1.5.RELEASE.jar:$REPO"/hamcrest-core-1.3.jar:.....(省略很多,就是所有jar包一個個列出來)
通過設置classpath通配符,可以讓上面的配置清爽很多,同時所有打包後的jar目錄的包都可以設置到classpath了。另外jvm啓動參數也簡短了很多,在linux服務器上查看進程也清晰了。
<useWildcardClassPath>true</useWildcardClassPath>
設置以後的classpath如下:
CLASSPATH="$REPO"/*