Maven項目打包為jar的四種方式
這里收集整理下以往打包MAVEN項目為JAR包的各種方式
直接打包,不打包依賴包
直接打包,不打包依賴包,僅打包出項目中的代碼到JAR包中。在POM中添加如下plugin即可,隨后執(zhí)行maven install
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
將依賴JAR包輸出到lib目錄方式
將項目中的JAR包的依賴包輸出到指定的目錄下,修改outputDirectory配置,如下面的${project.build.directory}/lib。如想將打包好的JAR包可以通過命令直接運行,如java -jar xx.jar,還需要制定manifest配置的classpathPrefix與上面配置的相對應(yīng),如上面把依賴JAR包輸出到了lib,則這里的classpathPrefix也應(yīng)指定為lib/;同時,并指定出程序的入口類,在配置mainClass節(jié)點中配好入口類的全類名。
這種打包方式對于JAVA項目是通用的,不管是不是springBoot的項目還是傳統(tǒng)的JAVA項目,都可行。
<plugins>
<!-- java編譯插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.yourpakagename.mainClassName</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
有時為了方便,可以把classpath初在當(dāng)前目錄上,默認(rèn)的classpath會在jar包內(nèi),可以在Main方法配置后加上manifestEntries配置,指定classpath,如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<!-- 主函數(shù)的入口 -->
<mainClass>com.yourpakagename.mainClassName</mainClass>
<!-- 打包時 MANIFEST.MF文件不記錄的時間戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
將項目依賴包和項目打為一個包
這種方式打包會將項目中的依賴包和項目代碼都打為一個JAR包,其配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<archive>
<manifest>
<mainClass>com.xxg.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
但此種方式對于傳統(tǒng)的JAVA項目打包沒問題,如是打有spring框架的JAR包就不可以了。可以采用maven-shade-plugin的插件來打包,來實現(xiàn)spring框架的打包
有好幾位朋友說不能在使用此配置時無法將項目的依賴也打到一個JAR包中,通過追溯發(fā)現(xiàn)由于是執(zhí)行的package命令導(dǎo)致發(fā)。此處應(yīng)執(zhí)行插件的assembly命令。如下圖:

springBoot項目打包
springBoot項目打包最常用且最簡單的方式是用springBoot的打包plugin
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
在POM中加入此插件,再點擊maven [install]或[repackge]就會把當(dāng)前項目里所有依賴包和當(dāng)前項目的源碼都打成一個JAR包,同時還會將沒有依賴包的JAR包也打出來,以.original的就是了
groovy項目打包
如果項目中包含groovy代碼,默認(rèn)采用MAVEN打包時不會將groovy代碼進(jìn)行打包,需要加入如下配置
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<goals>
<goal>addSources</goal>
<goal>addStubSources</goal>
<goal>compile</goal>
<goal>execute</goal>
</goals>
</execution>
</executions>
</plugin>到此這篇關(guān)于Maven項目打包為jar的四種方式的文章就介紹到這了,更多相關(guān)Maven打包為jar內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用modbus4j實現(xiàn)modbus?tcp通訊
Modbus是由Modicon(現(xiàn)為施耐德電氣公司的一個品牌)在1979年發(fā)明的,是全球第一個真正用于工業(yè)現(xiàn)場的總線協(xié)議,本文主要介紹了java如何使用modbus4j實現(xiàn)modbus?tcp通訊,感興趣的可以了解下2023-12-12
JAVA基于PDF box將PDF轉(zhuǎn)為圖片的實現(xiàn)方法
這篇文章主要介紹了JAVA基于PDF box將PDF轉(zhuǎn)為圖片的操作方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-07-07
SpringCloud?Feign集成AOP的常見問題與解決
在使用?Spring?Cloud?Feign?作為微服務(wù)通信的工具時,我們可能會遇到?AOP?不生效的問題,這篇文章將深入探討這一問題,給出幾種常見的場景,分析可能的原因,并提供解決方案,希望對大家有所幫助2023-10-10
Springboot 整合 Java DL4J 打造文本摘要生成系統(tǒng)
本文介紹了如何使用SpringBoot整合JavaDeeplearning4j構(gòu)建文本摘要生成系統(tǒng),該系統(tǒng)能夠自動從長篇文本中提取關(guān)鍵信息,生成簡潔的摘要,幫助用戶快速了解文本的主要內(nèi)容,技術(shù)實現(xiàn)包括使用LSTM神經(jīng)網(wǎng)絡(luò)進(jìn)行模型構(gòu)建和訓(xùn)練,并通過SpringBoot集成RESTfulAPI接口2024-11-11
JVM調(diào)優(yōu)OutOfMemoryError異常分析
這篇文章主要為大家介紹了JVM調(diào)優(yōu)OutOfMemoryError異常分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Java面試Logback打印日志如何獲取當(dāng)前方法名稱題解
這篇文章主要為大家介紹了Java面試Logback打印日志如何獲取當(dāng)前方法名稱題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
在IDEA中創(chuàng)建Web項目的詳細(xì)過程
這篇文章主要給大家介紹了關(guān)于在IDEA中創(chuàng)建Web項目的詳細(xì)過程,很多朋友可能在學(xué)習(xí)java基礎(chǔ)的時候已經(jīng)熟練掌握了IDEA創(chuàng)建java項目的基本步驟,但隨著學(xué)習(xí)技術(shù)的不斷深入,不同的IDEA版本可能在項目的創(chuàng)建頁面上出現(xiàn)些許的出入,需要的朋友可以參考下2023-10-10

