如果你需要將maven構建的項目打包成可執行jar且包含所有依賴,Assembly插件可以幫助你實現這個需求。
1. Assembly插件簡介
Assembly插件的兩個主要目標:
-
assembly:assembly
被設計成直接從命令行調用,它永遠不應該綁定到生命周期階段。目標是一個聚合mojo。 -
single mojo
被設計成作為你每日構建的一部分,應該被綁定到項目生命周期的某個階段。
Assembly插件為一些常用的歸檔類型提供了內置的描述符:
- bin
不是本文重點,省略... - jar-with-dependencies
jar-with-dependencies描述符構建一個帶有主項目jar文件和所有項目運行時依賴未解開內容的JAR歸檔文件。外加上適當的Main-Class Manifest條目,該描述符可以為你的項目生成一個自包含的,可運行的jar,即使該項目含有依賴。 - project
不是本文重點,省略... - src
不是本文重點,省略...
2. 創建一個自包含的可執行jar
pom.xml中添加如下assembly插件配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hello world</name>
<description>hello world</description>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-2</version>
<executions>
<execution>
<id>create-executable-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.helloworld.Main</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
執行mvn package后,將會得到一個可執行jar。
參考資料
- Maven權威指南中文版