日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用Maven 实现打包生成一个可执行jar包:附详细配置解释说明

發(fā)布時(shí)間:2025/1/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Maven 实现打包生成一个可执行jar包:附详细配置解释说明 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 需求

項(xiàng)目打包,滿(mǎn)足以下要求:

1.整個(gè)項(xiàng)目打一個(gè)Zip包下面包括應(yīng)用程序、應(yīng)用程序依賴(lài)的jar包、說(shuō)明文檔
2.項(xiàng)目打的jar包可以執(zhí)行不同類(lèi)里的Main函數(shù)
3.項(xiàng)目源碼打的jar包要與依賴(lài)的第三方j(luò)ar包分開(kāi)
4.項(xiàng)目里的執(zhí)行腳本也要一塊打包并進(jìn)行分類(lèi)
5.document目錄下的readme.txt放在壓縮包的根目錄下,其他的還放在這個(gè)目錄下
6.打的jar包去掉不需要的目錄(文件)

2. 開(kāi)發(fā)環(huán)境

IDEA-2016 Maven3.3.9

項(xiàng)目的目錄結(jié)構(gòu):

3. Maven打包插件介紹

assembly翻譯過(guò)來(lái)就是組裝、裝配的意思
Maven對(duì)項(xiàng)目打包常用的打包插件有三種,分別是:

插件功能
maven-jar-pluginmaven 默認(rèn)打包插件,用來(lái)創(chuàng)建 project jar
maven-shade-plugin打可執(zhí)行包,executable(fat) jar
maven-assembly-plugin支持自定義打包方式

這里使用maven-jar-plugin和maven-assembly-plugin
項(xiàng)目目錄:

每次找jar包之前先clean一下,不然的話(huà)IDEA會(huì)認(rèn)為你的項(xiàng)目沒(méi)有修改而不重新加載

另:配置文件的注釋已經(jīng)很詳細(xì)了,這里就不另外再說(shuō)明了

4. Maven使用maven-jar-plugin打可執(zhí)行jar包

主要配置如下:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><!-- 對(duì)要打的jar包進(jìn)行配置 --><configuration><!-- Configuration of the archiver --><archive><!--生成的jar中,不要包含pom.xml和pom.properties這兩個(gè)文件--><addMavenDescriptor>false</addMavenDescriptor><!-- Manifest specific configuration --><manifest><!--是否要把第三方j(luò)ar放到manifest的classpath中--><addClasspath>true</addClasspath><!--生成的manifest中classpath的前綴,因?yàn)橐训谌絡(luò)ar放到lib目錄下,所以classpath的前綴是lib/--><classpathPrefix>lib/</classpathPrefix></manifest></archive><!--過(guò)濾掉不希望包含在jar中的文件--><excludes><!-- 排除不需要的文件夾(路徑是jar包內(nèi)部的路徑) --><exclude>**/assembly/</exclude></excludes></configuration> </plugin>

完整配置見(jiàn)底部

5. Maven使用maven-assembly-plugin裝需要打包的文件打進(jìn)zip包

pom.xml下的主要配置如下:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.4</version><!-- 對(duì)項(xiàng)目的組裝進(jìn)行配置 --><configuration><!-- 指定assembly插件的配置文件所在位置 --><descriptors><descriptor>src/main/resources/assembly/package.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><!-- 將組裝綁定到maven生命周期的哪一階段 --><phase>package</phase><goals><!-- 指定assembly插件的打包方式--><goal>single</goal></goals></execution></executions> </plugin>

assembly插件的配置文件package.xml見(jiàn)底部

6. Maven生成可執(zhí)行jar包及zip項(xiàng)目壓縮包

雙擊執(zhí)行mvn:package會(huì)生成兩個(gè)包:可執(zhí)行jar包和項(xiàng)目壓縮包,因?yàn)閍ssembly的裝配配置的是綁定到這上面來(lái)的
雙擊執(zhí)行assembly:single只生成項(xiàng)目壓縮包

這里執(zhí)行mvn:package

解壓后的項(xiàng)目壓縮包目錄結(jié)構(gòu):

7. 執(zhí)行jar包

解壓縮生成的項(xiàng)目包
TestString的源碼:

public class TestString {public static void main(String[] args) {String[] arr = new String[]{"aaa", "bbb", "ccc", "DDD", "EEE", "FFF"};System.out.println(StringUtils.join(arr, "---"));} }

TestNumber的源碼:

public class TestNumber {public static void main(String[] args) {Integer[] arr = new Integer[]{11, 22, 33, 44, 55, 66};System.out.println(StringUtils.join(arr, "---"));} }

命令行運(yùn)行生成的jar

java -classpath dong.jar com.dong.bigdata.TestString java -classpath dong.jar com.dong.bigdata.TestNumber

運(yùn)行結(jié)果:

8. pom.xml配置

包含兩個(gè)文件:
pom.xml整體的配置
package.xml包含在pom.xml中,用于指定assembly裝配時(shí)的配置

pom.xml文件:

<&#63;xml version="1.0" encoding="UTF-8"&#63;> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- ####################### 基礎(chǔ)設(shè)置 ###################### --><!--groupId:項(xiàng)目或者組織的唯一標(biāo)志,并且配置時(shí)生成路徑也是由此生成,如org.myproject.mojo生成的相對(duì)路徑為:/org/myproject/mojo--><groupId>com.dong</groupId><!--項(xiàng)目的通用名稱(chēng)--><artifactId>bigdata</artifactId><!--打包機(jī)制,如pom,jar,maven-plugin,ejb,war,ear,rar,par--><packaging>jar</packaging><!--項(xiàng)目的版本--><version>1.0-SNAPSHOT</version><!-- ####################### 項(xiàng)目信息 ###################### --><!--用戶(hù)描述項(xiàng)目的名稱(chēng),無(wú)關(guān)緊要的東西--><name>bigdata</name><!--寫(xiě)明開(kāi)發(fā)團(tuán)隊(duì)的網(wǎng)站,無(wú)關(guān)緊要--><url>http://http://www.dong.com/.com</url><!-- ####################### 環(huán)境設(shè)置 ###################### --><properties><!-- 項(xiàng)目執(zhí)行腳本目錄 --><project.script.execute.directory>src/main/scripts/execute</project.script.execute.directory><!-- 項(xiàng)目說(shuō)明文檔目錄 --><project.document.directory>document</project.document.directory><!-- 項(xiàng)目配置文件目錄 --><project.config.directory>src/main/resources</project.config.directory><!-- 項(xiàng)目編碼 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 本地編譯JDK版本 --><maven.compiler.source>1.8</maven.compiler.source><!-- 項(xiàng)目部署JDK版本 --><maven.compiler.target>1.8</maven.compiler.target></properties><!--配置Maven的倉(cāng)庫(kù), 在此處配置的倉(cāng)庫(kù)會(huì)優(yōu)先于setting.xml里配置的倉(cāng)庫(kù),建議哪個(gè)倉(cāng)庫(kù)快,哪個(gè)配置在前面, 然后如果Maven在前面配置的倉(cāng)庫(kù)找不到的話(huà)會(huì)去后面的倉(cāng)庫(kù)找,如果后面的倉(cāng)庫(kù)都找不到,會(huì)去setting.xml中央倉(cāng)庫(kù)里找--><repositories><!-- 阿里云倉(cāng)庫(kù),配置Maven倉(cāng)庫(kù),速度快配置在最前面 --><repository><id>aliyun</id><url>http://maven.aliyun.com/nexus/content/groups/public</url></repository><!-- 國(guó)內(nèi)備選倉(cāng)庫(kù) --><repository><id>repo2</id><url>http://repo2.maven.org/maven2/</url></repository><!-- Cloudera倉(cāng)庫(kù),如果在阿里云倉(cāng)庫(kù)里找不到去Cloudera的倉(cāng)庫(kù)里找,主要是CDH版本Hadoop依賴(lài)的jar --><repository><id>cloudera</id><url>https://repository.cloudera.com/artifactory/cloudera-repos/</url></repository><!-- Scala倉(cāng)庫(kù),如果前面兩個(gè)都找不到來(lái)倉(cāng)庫(kù)找,如果此倉(cāng)庫(kù)也找不到,去中央倉(cāng)庫(kù)找 --><repository><id>scala-tools.org</id><name>Scala-Tools Maven2 Repository</name><url>http://scala-tools.org/repo-releases</url></repository></repositories><dependencies><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency></dependencies><build><finalName>dong</finalName><plugins><!-- The configuration of maven-jar-plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><!-- 對(duì)要打的jar包進(jìn)行配置 --><configuration><!-- Configuration of the archiver --><archive><!--生成的jar中,不要包含pom.xml和pom.properties這兩個(gè)文件--><addMavenDescriptor>false</addMavenDescriptor><!-- Manifest specific configuration --><manifest><!--是否要把第三方j(luò)ar放到manifest的classpath中--><addClasspath>true</addClasspath><!--生成的manifest中classpath的前綴,因?yàn)橐训谌絡(luò)ar放到lib目錄下,所以classpath的前綴是lib/--><classpathPrefix>lib/</classpathPrefix></manifest></archive><!--過(guò)濾掉不希望包含在jar中的文件--><excludes><!-- 排除不需要的文件夾(路徑是jar包內(nèi)部的路徑) --><exclude>**/assembly/</exclude></excludes></configuration></plugin><!-- The configuration of maven-assembly-plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.4</version><!-- 對(duì)項(xiàng)目的組裝進(jìn)行配置 --><configuration><!-- 指定assembly插件的配置文件所在位置 --><descriptors><descriptor>src/main/resources/assembly/package.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><!-- 將組裝綁定到maven生命周期的哪一階段 --><!--<phase>package</phase>--><goals><!-- 指定assembly插件的打包方式--><goal>single</goal></goals></execution></executions></plugin></plugins></build> </project>

9. package.xml文件

<&#63;xml version="1.0" encoding="UTF-8"&#63;> <assembly><id>full</id><!-- 最終打包成一個(gè)用于發(fā)布的zip文件 --><formats><format>zip</format></formats><!-- 把依賴(lài)jar包打包進(jìn)Zip壓縮文件的lib目錄下 --><dependencySets><dependencySet><!--不使用項(xiàng)目的artifact,第三方j(luò)ar不要解壓,打包進(jìn)zip文件的lib目錄--><useProjectArtifact>false</useProjectArtifact><!-- 第三方j(luò)ar打包進(jìn)Zip文件的lib目錄下, --><!-- 注意此目錄要與maven-jar-plugin中classpathPrefix指定的目錄相同, --><!-- 不然這些依賴(lài)的jar包加載到ClassPath的時(shí)候會(huì)找不到--><outputDirectory>lib</outputDirectory><!-- 第三方j(luò)ar不要解壓--><!--<unpack>false</unpack>--></dependencySet></dependencySets><!-- 文件設(shè)置,你想把哪些文件包含進(jìn)去,或者把某些文件排除掉,都是在這里配置--><fileSets><!-- 把項(xiàng)目自己編譯出來(lái)的可執(zhí)行jar,打包進(jìn)zip文件的根目錄 --><fileSet><directory>${project.build.directory}</directory><outputDirectory></outputDirectory><includes><include>*.jar</include></includes></fileSet><!--把項(xiàng)目readme說(shuō)明文檔,打包進(jìn)zip文件根目錄下(這里針對(duì)目錄document/readme.txt文件)${projet.document.directory}是pom.xml中自己配置的--><fileSet><directoryl>${projet.document.directory}</directoryl><outputDirectory></outputDirectory><includes><include>readme.*</include></includes></fileSet><!--把項(xiàng)目相關(guān)的說(shuō)明文檔(除了readme文檔),打包進(jìn)zip文件根目錄下的document目錄(這里針對(duì)document/exclode.txt文件)${project.document.directory}是在pom.xml中自己配置的--><fileSet><directory>${project.document.directory}</directory><outputDirectory>document</outputDirectory><excludes><exclude>readme.*</exclude></excludes></fileSet><!--把項(xiàng)目的腳本文件目錄(src/main/scripts )中的啟動(dòng)腳本文件,打包進(jìn)zip文件的根目錄(這里針對(duì)的是src/scripts/execute/include-file.sh文件)${project.script.execute.directory}--><fileSet><directory>${project.script.execute.directory}</directory><outputDirectory></outputDirectory><includes><include>*</include></includes></fileSet></fileSets> </assembly>

參考鏈接:https://www.yisu.com/zixun/313235.html

總結(jié)

以上是生活随笔為你收集整理的使用Maven 实现打包生成一个可执行jar包:附详细配置解释说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品视频区 | av在线看片| 99在线精品免费视频 | 久久久精品日本 | 日本一区成人 | 欧美jizz欧美性大全 | 美女张开双腿让男人捅 | 亚洲欧美综合自拍 | 国产资源在线播放 | 国产黄色片在线观看 | 91九色网 | 99热久| 欧美日韩一区二区区别是什么 | 国产日韩视频一区 | 成人久久久精品国产乱码一区二区 | 久热网站 | www.在线 | 北条麻妃在线一区二区 | 午夜诱惑痒痒网 | 超碰在线98 | 日本一区二区三区四区五区 | 国产伦理吴梦梦伦理 | 男生和女生差差视频 | 亚洲区精品 | 国产特级毛片aaaaaa | 香蕉视频网页版 | 美女131爽爽爽做爰视频 | 激情视频网 | 日本久久久久久 | 亚洲精品久| 少妇又紧又色又爽又刺激视频 | 亚洲免费观看高清完整 | 国产91精品一区二区麻豆亚洲 | 国产精品有限公司 | 蜜桃av乱码一区二区三区 | 在线97| 好色婷婷 | 在线色av| 在线播放无码后入内射少妇 | 久久久69 | 亚洲男性天堂 | 69精品久久久| 国产网站久久 | 精品香蕉视频 | 欧美成人一区二区三区四区 | 亚洲精品免费在线视频 | 日本视频中文字幕 | 妹子色综合 | 久啪视频 | 日韩高清在线观看一区 | 黄色无遮挡 | 琪琪色在线视频 | 日韩中文免费 | 大地资源影视在线播放观看高清视频 | 欧美精品免费播放 | 伊甸园精品区 | 在线播放免费av | 亚洲视频一区二区在线观看 | 视频一区二区不卡 | 精品久久久视频 | 精品理论片 | 激情另类小说 | 九色91视频| 日批免费网站 | 伊人88| 无码日韩精品视频 | 永久免费看片在线观看 | 国产v在线观看 | 国产黄在线 | 手机在线看片日韩 | 在线免费看黄网站 | 欧美午夜精品一区二区 | 黄色一级免费观看 | 玖玖五月| 按摩害羞主妇中文字幕 | 久久这里只有精品23 | av片在线观看免费 | 九九视频免费 | 免费一级特黄特色大片 | 手机在线看片日韩 | 亚洲自拍偷拍一区二区 | 激情戏网站 | 日本大乳奶做爰 | 欧美性猛交xxx乱大交3 | 99国产精品白浆在线观看免费 | 亚洲美女中文字幕 | 男人懂得网站 | 91免费在线播放 | 伊人888| 黄色a级免费 | a毛毛片 | 日剧网| 亚洲一区中文字幕永久在线 | 污网站在线观看免费 | 久久久久久久国产精品毛片 | 国模大胆一区二区三区 | 无码精品久久久久久久 | 中文字幕一区二区三区四区 | 毛片毛片毛片毛片毛片毛片 |