轉(zhuǎn)載原文 : ??https://www.coder.work/article/3793642??
問題
我想把java項(xiàng)目打包為可運(yùn)行的分布式j(luò)ar包。我該怎樣做,才能把項(xiàng)目中maven所依賴的jar包導(dǎo)入到我的項(xiàng)目jar包中?
回答
在??pom.xml?
?文件中,加入如下的插件:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!-- 這里是你的項(xiàng)目main函數(shù)所在的類的全限定名 -->
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
之后,運(yùn)行maven命令:
mvn clean compile assembly:single
??clean?
??,??compile?
??,??assembly:single?
??任務(wù)將會依次被執(zhí)行;??compile?
??任務(wù)必須寫在??assembly:single?
?之前,否則打包后的jar包內(nèi)將不會有你的編譯代碼。
(譯注:執(zhí)行完后,會在你的maven項(xiàng)目的target目錄下,生成想要的jar包,而不再需要使用??mvn package?
?命令進(jìn)行打包)
通常情況下,上述maven命令執(zhí)行后會自動綁定到項(xiàng)目的構(gòu)建階段,從而保證了以后在執(zhí)行??mvn install?
??命令時的jar包也會被構(gòu)建。 (譯注:下面是實(shí)際上完整的默認(rèn)的??pom.xml?
??配置,只不過??<executions>?
?可以被省略,若省略則按照下述默認(rèn)的配置執(zhí)行)
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- 用于maven繼承項(xiàng)目的聚合 -->
<phase>package</phase> <!-- 綁定到package階段 -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
拓展
怎樣去運(yùn)行打包后的可運(yùn)行jar包?
- 對上述配置中已經(jīng)指定了?
?main?
?函數(shù)所在類的jar包,打開命令行窗口,輸入命令:
java -jar jar包的路徑/jar包的名字.jar
例如:
java -jar D:my_java_projectmaven_test.jar
- 若在pom.xml并沒有指定?
?main?
?方法所在類,那么該jar的運(yùn)行應(yīng)采取如下命令:
java -cp jar包的路徑/jar包的名字.jar main方法所在類的全限定名
例如:
java -cp D:my_java_projectmaven_test.jar com.my.path.MainClass
本文摘自 :https://blog.51cto.com/u