Maven項(xiàng)目打包為jar的四種方式
這里收集整理下以往打包MAVEN項(xiàng)目為JAR包的各種方式
直接打包,不打包依賴包
直接打包,不打包依賴包,僅打包出項(xiàng)目中的代碼到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目錄方式
將項(xiàng)目中的JAR包的依賴包輸出到指定的目錄下,修改outputDirectory配置,如下面的${project.build.directory}/lib。如想將打包好的JAR包可以通過命令直接運(yùn)行,如java -jar xx.jar,還需要制定manifest配置的classpathPrefix與上面配置的相對(duì)應(yīng),如上面把依賴JAR包輸出到了lib,則這里的classpathPrefix也應(yīng)指定為lib/;同時(shí),并指定出程序的入口類,在配置mainClass節(jié)點(diǎn)中配好入口類的全類名。
這種打包方式對(duì)于JAVA項(xiàng)目是通用的,不管是不是springBoot的項(xiàng)目還是傳統(tǒng)的JAVA項(xiàng)目,都可行。
<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>
有時(shí)為了方便,可以把classpath初在當(dāng)前目錄上,默認(rèn)的classpath會(huì)在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>
<!-- 打包時(shí) MANIFEST.MF文件不記錄的時(shí)間戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
將項(xiàng)目依賴包和項(xiàng)目打?yàn)橐粋€(gè)包
這種方式打包會(huì)將項(xiàng)目中的依賴包和項(xiàng)目代碼都打?yàn)橐粋€(gè)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>
但此種方式對(duì)于傳統(tǒng)的JAVA項(xiàng)目打包沒問題,如是打有spring框架的JAR包就不可以了??梢圆捎胢aven-shade-plugin的插件來打包,來實(shí)現(xiàn)spring框架的打包
有好幾位朋友說不能在使用此配置時(shí)無法將項(xiàng)目的依賴也打到一個(gè)JAR包中,通過追溯發(fā)現(xiàn)由于是執(zhí)行的package命令導(dǎo)致發(fā)。此處應(yīng)執(zhí)行插件的assembly命令。如下圖:

springBoot項(xiàng)目打包
springBoot項(xiàng)目打包最常用且最簡單的方式是用springBoot的打包plugin
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
在POM中加入此插件,再點(diǎn)擊maven [install]或[repackge]就會(huì)把當(dāng)前項(xiàng)目里所有依賴包和當(dāng)前項(xiàng)目的源碼都打成一個(gè)JAR包,同時(shí)還會(huì)將沒有依賴包的JAR包也打出來,以.original的就是了
groovy項(xiàng)目打包
如果項(xiàng)目中包含groovy代碼,默認(rèn)采用MAVEN打包時(shí)不會(huì)將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項(xiàng)目打包為jar的四種方式的文章就介紹到這了,更多相關(guān)Maven打包為jar內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談synchronized加鎖this和class的區(qū)別
synchronized 是 Java 語言中處理并發(fā)問題的一種常用手段,本文主要介紹了synchronized加鎖this和class的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11
java 獲取冒號(hào)后面的參數(shù)(正則)實(shí)現(xiàn)代碼
這篇文章主要介紹了java 獲取冒號(hào)后面的參數(shù)(正則)實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Java實(shí)現(xiàn)List去重的幾種方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了Java中List去重的幾種常用方法總結(jié),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)和參考價(jià)值,需要的小伙伴可以了解一下2023-09-09
Java中注解@JsonFormat與@DateTimeFormat的使用
從數(shù)據(jù)庫獲取時(shí)間傳到前端進(jìn)行展示的時(shí)候,我們有時(shí)候可能無法得到一個(gè)滿意的時(shí)間格式的時(shí)間日期,本文主要介紹了Java中注解@JsonFormat與@DateTimeFormat的使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
解決Maven項(xiàng)目報(bào)錯(cuò):failed?to?execute?goal?org.apache.maven.plug
這篇文章主要介紹了解決Maven項(xiàng)目報(bào)錯(cuò):failed?to?execute?goal?org.apache.maven.plugins:maven-compiler-plugin:3.13.0的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
淺析Java類和數(shù)據(jù)結(jié)構(gòu)中常用的方法
下面小編就為大家?guī)硪黄獪\析Java類和數(shù)據(jù)結(jié)構(gòu)中常用的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找)
本篇文章主要介紹了詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09

