使用maven-assembly-plugin外掛,將maven管理的遠端和本地依賴jar包打入可執行jar包
阿新 • • 發佈:2018-12-17
最近在修改一個小工具,原來的做法是把依賴包都下載到本地目錄,打包時候使用fatjar打包整個專案依賴;現在修改為maven管理依賴包,使用maven-assembly-plugin外掛打包;如果依賴包全部是遠端預設的依賴配置,這樣沒有問題;但裡面有些是自己實現的本地依賴,這個時候打包就有問題了;因為本地依賴包scope配置為system,而預設的配置為runtime,所以本地依賴包沒有打進去
處理方案:使用自定義配置替代maven-assembly-plugin的預設配置
預設配置:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>主程式入口方法</mainClass> </manifest> <manifestEntries> <Class-Path>.</Class-Path> </manifestEntries> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
這裡我們主要修改如下配置:
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
將這一段去掉,新增自定義配置檔案 assembly.xml
修改配置如下:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>主程式入口方法</mainClass> </manifest> <manifestEntries> <Class-Path>.</Class-Path> </manifestEntries> </archive> <!-- 將這一段註釋掉 --> <!--<descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs>--> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <!-- 增加配置 --> <configuration> <!-- assembly.xml檔案路徑 --> <descriptors> <descriptor>src/assembly/assembly.xml</descriptor> </descriptors> </configuration> </execution> </executions> </plugin>
assembly.xml 檔案配置如下:
<assembly> <id>jar-with-dependencies</id> <formats> <format>jar</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <dependencySets> <!-- 預設的配置 --> <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <unpack>true</unpack> <scope>runtime</scope> </dependencySet> <!-- 增加scope型別為system的配置 --> <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <unpack>true</unpack> <scope>system</scope> </dependencySet> </dependencySets> </assembly>
可以看到,主要增加了scope型別為system的配置;這樣在打包的時候,就會把本地jar也打包進去
當然預設的配置也是可以使用的,這個時候可以把本地依賴上傳到maven倉庫;然後將dependency中路徑和scope配置去掉;這樣就可以使用預設配置進行打包,可以實現以上同樣效果
本文參考連結: