用java寫了一個小工具,使用maven java 工程。寫完後,想打包成一個可執行檔jar包。
使用maven的外掛程式maven-assembly-plugin
pom.xml裡添加
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>org.kuan.wang.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins> </build>
執行命令:
mvn clean compile assembly:single
在target檔案夾裡產生MavenTestApp-1.0-SNAPSHOT-jar-with-dependencies.jar
這個jar包便是可執行檔jar了,用命令java -jar path\jarfile便可以執行。
注意:compile必須再assembly:single之前,要不然你工程的代碼(class檔案)就不會被打包進去。
assembly:single是maven的goal.
通常情況下,這個goal要綁定到maven build 的phase裡,這樣它就可以自動執行。mvn package是用來打包jar包的。只是jar包不可執行。
在以上的pom檔案裡加<executions>
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>org.kuan.wang.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions></plugin>
這樣的話直接運行以下命令就行了。
mvn clean package
另外有幾點要注意。
1. 必須要有
<archive> <manifest> <mainClass>org.kuan.wang.App</mainClass> </manifest></archive>
否則會報錯
no main manifest attribute, in target\MavenTestApp-1.0-SNAPSHOT-jar-with-dependencies.jar
<mainClass>是你自己工程的入口。
2. 使用mvn clean compile assembly:single,只產生一個jar包,名字裡有jar-with-dependencies,可執行。
使用mvn package產生兩個jar包,名字裡有jar-with-dependencies的jar是可執行檔。
3. 如果使用<goal>assembly</goal>
用命令mvn assembly:assembly會產生兩個jar包。跟使用了mvn package一樣
無需再像命令assembly:single一樣前面必須加compile.