Maven打包可執(zhí)行jar包的方法大全
打包方法
方法一:使用maven-jar-plugin和maven-dependency-plugin
首先,maven-jar-plugin的作用是配置mainClass和指定classpath。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>libs/</classpathPrefix>
<mainClass>
org.baeldung.executable.ExecutableMavenJar
</mainClass>
</manifest>
</archive>
</configuration>
</plugin>addClasspath: 是否在manifest文件中添加classpath。默認為false。如果為true,則會在manifest文件中添加classpath,這樣在啟動的時候就不用再手動指定classpath了。如下所示,文件中增加了Class-Path一行
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: michealyang Class-Path: libs/jetty-server-9.4.7.v20170914.jar lib/javax.servlet-api -3.1.0.jar libs/jetty-http-9.4.7.v20170914.jar Created-By: Apache Maven 3.3.9 Build-Jdk: 1.8.0_162-ea Main-Class: com.michealyang.jetty.embeded.EmbeddedJettyServer
classpathPrefix: classpath的前綴。如上面的manifest文件中,Class-Path的值中,每個jar包的前綴都是libs/。本質(zhì)上,這個配置的值是所依賴jar包所在的文件夾。配置正確了才能找到依賴
mainClass: 指定啟動時的Main Class
其次,maven-dependency-plugin會把所依賴的jar包copy到指定目錄
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/libs
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>executions中的配置都很重要,按照上面的配置來就行了。outputDirectory指定了要將所依賴的jar包copy到哪個目錄。要與maven-jar-plugin中的classpathPrefix一致。
執(zhí)行如下命令,即可打包:
mvn package
打包結(jié)果是,自己寫的Class在jar包中,所依賴的jar包在libs目錄中:
├── embedded-jetty-1.0.0-SNAPSHOT.jar ├── lib │ ├── jetty-server-9.4.7.v20170914.jar │ ├── jetty-http-9.4.7.v20170914.jar
執(zhí)行如下命令即可啟動jar包:
java -jar embedded-jetty-1.0.0-SNAPSHOT.jar
優(yōu)點
有諸多配置項,很自由,每個步驟都可控
缺點
打成的最終jar包中沒有所依賴的jar包。依賴跟自己的代碼不在一個jar包中。部署或者移動的時候,要考慮到多個文件,比較麻煩
方法二:使用maven-assembly-plugin (推薦)
maven-assembly-plugin可以將所有的東西都打包到一個jar包中。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
com.michealyang.jetty.embeded.EmbeddedJettyServer
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>執(zhí)行mvn package后,會在target文件夾下生成兩個jar包,一個是不帶依賴的jar包,一個是后綴有-dependencies帶有依賴的jar包,如:
May 31 16:42 embedded-jetty-1.0.0-SNAPSHOT-jar-with-dependencies.jar May 31 16:42 embedded-jetty-1.0.0-SNAPSHOT.jar
啟動時,直接執(zhí)行即可:
java -jar embedded-jetty-1.0.0-SNAPSHOT-jar-with-dependencies.jar
優(yōu)點
所有的東西都打到一個jar包中,很方便
缺點
配置項少,不自由。
方法三:使用maven-shade-plugin
跟maven-assembly-plugin類似,都可以將所有的東西都打包到一個jar包中。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<transformers>
<transformer implementation=
"org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.michealyang.jetty.embeded.EmbeddedJettyServer</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>執(zhí)行mvn package后,會在target文件夾下生成兩個jar包,一個是不帶依賴的jar包,一個是后綴有-shaded帶有依賴的jar包,如:
May 31 16:53 embedded-jetty-1.0.0-SNAPSHOT-shaded.jar May 31 16:53 embedded-jetty-1.0.0-SNAPSHOT.jar
啟動時,直接執(zhí)行即可:
java -jar embedded-jetty-1.0.0-SNAPSHOT-jar-with-shaded.jar
優(yōu)點
功能同maven-assembly-plugin,但比前者強大
缺點
配置起來太麻煩。當(dāng)你需要高級功能的時候,更是麻煩的不要不要的。
方法四:使用onejar-maven-plugin
<plugin>
<groupId>com.jolira</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<executions>
<execution>
<configuration>
<mainClass>org.baeldung.executable.
ExecutableMavenJar</mainClass>
<attachToBuild>true</attachToBuild>
<filename>
${project.build.finalName}.${project.packaging}
</filename>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>方法五:使用spring-boot-maven-plugin
能同時打可執(zhí)行jar包和war包
需要maven版本不低于3.2
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>spring-boot</classifier>
<mainClass>
org.baeldung.executable.ExecutableMavenJar
</mainClass>
</configuration>
</execution>
</executions>
</plugin>兩個重點:
goal要寫成repackageclassifier要寫成spring-boot
方法六:使用tomcat7-maven-plugin
可打包成一個web工程類型的jar包。其實是內(nèi)嵌了一個tomcat在里面。
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<id>tomcat-run</id>
<goals>
<goal>exec-war-only</goal>
</goals>
<phase>package</phase>
<configuration>
<path>/</path>
<enableNaming>false</enableNaming>
<finalName>webapp.jar</finalName>
<charset>utf-8</charset>
</configuration>
</execution>
</executions>
</plugin>?????????????優(yōu)點
只有一個jar包
缺點
打包出的文件很大。因為里面內(nèi)嵌了一個tomcat
以上就是Maven打包可執(zhí)行jar包的方法大全的詳細內(nèi)容,更多關(guān)于Maven打包可執(zhí)行jar包的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring的RedisTemplate存儲的key和value有特殊字符的處理
這篇文章主要介紹了Spring的RedisTemplate存儲的key和value有特殊字符的處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
springboot創(chuàng)建監(jiān)聽和處理事件的操作方法
這篇文章主要介紹了springboot創(chuàng)建監(jiān)聽和處理事件的操作方法,使用Spring Boot的事件機制來監(jiān)聽和處理事件有多種優(yōu)勢,本文給大家介紹的非常詳細,需要的朋友參考下吧2024-07-07
springboot使用spring-data-jpa操作MySQL數(shù)據(jù)庫
這篇文章主要介紹了springboot使用spring-data-jpa操作MySQL數(shù)據(jù)庫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
Spring Boot 3.x 整合Swagger的示例教程
本文給大家介紹Spring Boot 3.x 整合Swagger的示例教程,結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-06-06
java 服務(wù)器接口快速開發(fā)之servlet詳細教程
Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務(wù)程序或服務(wù)連接器,用Java編寫的服務(wù)器端程序,具有獨立于平臺和協(xié)議的特性,主要功能在于交互式地瀏覽和生成數(shù)據(jù),生成動態(tài)Web內(nèi)容2021-06-06
java連接zookeeper實現(xiàn)zookeeper教程
這篇文章主要介紹了java連接zookeeper實現(xiàn)zookeeper教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

