當(dāng)前位置:首頁 > IT技術(shù) > 編程語言 > 正文

如何使用maven把項(xiàng)目及其依賴打包為可運(yùn)行jar包
2022-04-25 23:05:49


轉(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

開通會員,享受整站包年服務(wù)立即開通 >