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

Maven打包可執(zhí)行jar包的方法大全

 更新時間:2025年11月24日 08:36:36   作者:技術(shù)園地  
文章介紹了六種在Maven中打包可執(zhí)行jar包的方法,包括maven-jar-plugin、maven-dependency-plugin、maven-assembly-plugin、maven-shade-plugin、onejar-maven-plugin和spring-boot-maven-plugin,每種方法都有其優(yōu)缺點(diǎn),選擇哪種方法取決于具體需求

打包方法

方法一:使用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。默認(rèn)為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包c(diǎn)opy到指定目錄

<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包c(diǎn)opy到哪個目錄。要與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)點(diǎn)

有諸多配置項,很自由,每個步驟都可控

缺點(diǎn)

打成的最終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)點(diǎn)

所有的東西都打到一個jar包中,很方便
缺點(diǎn)

配置項少,不自由。

方法三:使用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)點(diǎn)
功能同maven-assembly-plugin,但比前者強(qiáng)大
缺點(diǎn)
配置起來太麻煩。當(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>

兩個重點(diǎn):

  • goal要寫成repackage
  • classifier要寫成spring-boot

方法六:使用tomcat7-maven-plugin

可打包成一個web工程類型的jar包。其實(shí)是內(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)點(diǎn)

只有一個jar包

缺點(diǎn)

打包出的文件很大。因?yàn)槔锩鎯?nèi)嵌了一個tomcat

以上就是Maven打包可執(zhí)行jar包的方法大全的詳細(xì)內(nèi)容,更多關(guān)于Maven打包可執(zhí)行jar包的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

志丹县| 灵宝市| 饶阳县| 和静县| 遂昌县| 达日县| 土默特右旗| 孝昌县| 内乡县| 新津县| 漯河市| 兴山县| 南陵县| 余干县| 潜山县| 敦化市| 绥中县| 巍山| 梁河县| 英超| 雷波县| 宜都市| 原平市| 蒲城县| 仙桃市| 德化县| 巩留县| 安岳县| 铅山县| 图木舒克市| 临邑县| 宜兰市| 长汀县| 太白县| 桐庐县| 宝鸡市| 新昌县| 年辖:市辖区| 千阳县| 建湖县| 荥经县|