最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Maven生成可直接運行的jar包(多種方式)

 更新時間:2024年11月26日 15:46:17   作者:叉叉哥  
文章介紹了三種使用Maven生成可以直接運行的jar包的方法:通過maven-jar-plugin和maven-dependency-plugin插件、maven-assembly-plugin插件以及maven-shade-plugin插件,每種方法都有其特點和適用場景,感興趣的朋友跟隨小編一起看看吧

Maven可以使用mvn package指令對項目進行打包,如果使用java -jar xxx.jar執(zhí)行運行jar文件,會出現(xiàn)"no main manifest attribute, in xxx.jar"(沒有設(shè)置Main-Class)、ClassNotFoundException(找不到依賴包)等錯誤。

要想jar包能直接通過java -jar xxx.jar運行,需要滿足:

1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,這樣才能確定程序的入口在哪里;

2、要能加載到依賴包。

使用Maven有以下幾種方法可以生成能直接運行的jar包,可以根據(jù)需要選擇一種合適的方法。

方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包

在pom.xml中配置:

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-jar-plugin</artifactId>
			<version>2.6</version>
			<configuration>
				<archive>
					<manifest>
						<addClasspath>true</addClasspath>
						<classpathPrefix>lib/</classpathPrefix>
						<mainClass>com.xxg.Main</mainClass>
					</manifest>
				</archive>
			</configuration>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-dependency-plugin</artifactId>
			<version>2.10</version>
			<executions>
				<execution>
					<id>copy-dependencies</id>
					<phase>package</phase>
					<goals>
						<goal>copy-dependencies</goal>
					</goals>
					<configuration>
						<outputDirectory>${project.build.directory}/lib</outputDirectory>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分內(nèi)容,<mainClass>com.xxg.Main</mainClass>指定MANIFEST.MF中的Main-Class,<addClasspath>true</addClasspath>會在MANIFEST.MF加上Class-Path項并配置依賴包,<classpathPrefix>lib/</classpathPrefix>指定依賴包所在目錄。

例如下面是一個通過maven-jar-plugin插件生成的MANIFEST.MF文件片段:

Class-Path: lib/commons-logging-1.2.jar lib/commons-io-2.4.jar Main-Class: com.xxg.Main

只是生成MANIFEST.MF文件還不夠,maven-dependency-plugin插件用于將依賴包拷貝到<outputDirectory>${project.build.directory}/lib</outputDirectory>指定的位置,即lib目錄下。

配置完成后,通過mvn package指令打包,會在target目錄下生成jar包,并將依賴包拷貝到target/lib目錄下,目錄結(jié)構(gòu)如下:

指定了Main-Class,有了依賴包,那么就可以直接通過java -jar xxx.jar運行jar包。

這種方式生成jar包有個缺點,就是生成的jar包太多不便于管理,下面兩種方式只生成一個jar文件,包含項目本身的代碼、資源以及所有的依賴包。

方法二:使用maven-assembly-plugin插件打包

在pom.xml中配置:

<build>
	<plugins>
		<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>
	</plugins>
</build>

打包方式:

mvn package assembly:single

打包后會在target目錄下生成一個xxx-jar-with-dependencies.jar文件,這個文件不但包含了自己項目中的代碼和資源,還包含了所有依賴包的內(nèi)容。所以可以直接通過java -jar來運行。

此外還可以直接通過mvn package來打包,無需assembly:single,不過需要加上一些配置:

<build>
	<plugins>
		<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>
			<executions>
				<execution>
					<id>make-assembly</id>
					<phase>package</phase>
					<goals>
						<goal>single</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

其中<phase>package</phase>、<goal>single</goal>即表示在執(zhí)行package打包時,執(zhí)行assembly:single,所以可以直接使用mvn package打包。

不過,如果項目中用到Spring Framework,用這種方式打出來的包運行時會出錯,使用下面的方法三可以處理。

方法三:使用maven-shade-plugin插件打包

在pom.xml中配置:

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-shade-plugin</artifactId>
			<version>2.4.1</version>
			<executions>
				<execution>
					<phase>package</phase>
					<goals>
						<goal>shade</goal>
					</goals>
					<configuration>
						<transformers>
							<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
								<mainClass>com.xxg.Main</mainClass>
							</transformer>
						</transformers>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

配置完成后,執(zhí)行mvn package即可打包。在target目錄下會生成兩個jar包,注意不是original-xxx.jar文件,而是另外一個。和maven-assembly-plugin一樣,生成的jar文件包含了所有依賴,所以可以直接運行。

如果項目中用到了Spring Framework,將依賴打到一個jar包中,運行時會出現(xiàn)讀取XML schema文件出錯。原因是Spring Framework的多個jar包中包含相同的文件spring.handlers和spring.schemas,如果生成一個jar包會互相覆蓋。為了避免互相影響,可以使用AppendingTransformer來對文件內(nèi)容追加合并:

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-shade-plugin</artifactId>
			<version>2.4.1</version>
			<executions>
				<execution>
					<phase>package</phase>
					<goals>
						<goal>shade</goal>
					</goals>
					<configuration>
						<transformers>
							<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
								<mainClass>com.xxg.Main</mainClass>
							</transformer>
							<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
								<resource>META-INF/spring.handlers</resource>
							</transformer>
							<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
								<resource>META-INF/spring.schemas</resource>
							</transformer>
						</transformers>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

到此這篇關(guān)于Maven生成可以直接運行的jar包的多種方式的文章就介紹到這了,更多相關(guān)Maven生成可運行jar包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java語言實現(xiàn)簡單FTP軟件 FTP協(xié)議分析(1)

    Java語言實現(xiàn)簡單FTP軟件 FTP協(xié)議分析(1)

    這篇文章主要介紹了Java語言實現(xiàn)簡單FTP軟件的第一篇,針對FTP協(xié)議進行分析,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 如何解決SpringBoot定時任務(wù)報錯Unexpected error occurred in scheduled task問題

    如何解決SpringBoot定時任務(wù)報錯Unexpected error occurred 

    這篇文章主要介紹了如何解決SpringBoot定時任務(wù)報錯Unexpected error occurred in scheduled task問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程詳解

    intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程詳解

    這篇文章主要介紹了intellij idea中安裝、配置mybatis插件Free Mybatis plugin的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 淺談IDEA中Maven配置問題全解決

    淺談IDEA中Maven配置問題全解決

    這篇文章主要介紹了淺談IDEA中Maven配置問題全解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java排序算法中的冒泡排序算法實現(xiàn)

    Java排序算法中的冒泡排序算法實現(xiàn)

    這篇文章主要介紹了Java排序算法中的冒泡排序算法實現(xiàn),冒泡排序只會操作相鄰的兩個數(shù)據(jù),每次冒泡操作都會對相鄰的兩個元素進行比較,看是否滿足大小關(guān)系要求,如果不滿足就讓它倆互換,需要的朋友可以參考下
    2023-12-12
  • Spring IoC 容器的使用詳解(最新整理)

    Spring IoC 容器的使用詳解(最新整理)

    文章介紹了Spring框架中的應(yīng)用分層思想與IoC容器原理,通過分層解耦業(yè)務(wù)邏輯、數(shù)據(jù)訪問等模塊,IoC容器利用@Component注解管理Bean,實現(xiàn)依賴注入與動態(tài)獲取,本文給大家介紹Spring IoC 容器的使用詳解,感興趣的朋友一起看看吧
    2025-07-07
  • 使用代碼生成器自定義Entity的部分注解

    使用代碼生成器自定義Entity的部分注解

    這篇文章主要介紹了使用代碼生成器自定義Entity的部分注解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java:com.netflix.client.ClientException錯誤解決

    Java:com.netflix.client.ClientException錯誤解決

    本文主要介紹了Java:com.netflix.client.ClientException錯誤解決,主要是指出客戶端?module-sso?試圖通過負載均衡器訪問服務(wù)時,負載均衡器沒有找到可用的服務(wù)器來處理請求,下面就來介紹一下解決方法
    2024-08-08
  • java中struts2實現(xiàn)文件上傳下載功能

    java中struts2實現(xiàn)文件上傳下載功能

    這篇文章主要介紹了java中struts2實現(xiàn)文件上傳下載功能的方法,以實例形式分析了struts2文件上傳下載功能的實現(xiàn)技巧與相關(guān)問題,具有一定的參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • Struts1教程之ActionMapping_動力節(jié)點Java學(xué)院整理

    Struts1教程之ActionMapping_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了Struts1教程之ActionMapping,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

玛纳斯县| 娱乐| 安岳县| 西乡县| 且末县| 黑水县| 新河县| 兴山县| 甘德县| 蓬莱市| 安新县| 文登市| 乌鲁木齐市| 望谟县| 正镶白旗| 隆林| 绥芬河市| 昭平县| 康马县| 河西区| 巴彦淖尔市| 岐山县| 龙陵县| 囊谦县| 玛纳斯县| 香港 | 阿克苏市| 合川市| 民乐县| 本溪市| 额尔古纳市| 封丘县| 偃师市| 卓资县| 长白| 高淳县| 额尔古纳市| 东至县| 阿瓦提县| 忻城县| 集贤县|