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

Maven打包的三種方式小結(jié)

 更新時(shí)間:2023年09月15日 09:12:17   作者:小布丁呢  
這篇文章給大家介紹了三種Maven打包的方式,使用maven-jar-plugin,使用maven-assembly-plugin和使用maven-shade-plugin這三種方式,通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

maven常用打包命令

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

 方法二:使用maven-assembly-plugin插件打包在pom.xml中配置:

 方法三:使用maven-shade-plugin插件打包在pom.xml中配置:

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

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

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

2、要能加載到依賴包。

使用Maven有以下幾種方法可以生成能直接運(yùn)行的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>會(huì)在MANIFEST.MF加上Class-Path項(xiàng)并配置依賴包,

<classpathPrefix>lib/</classpathPrefix>指定依賴包所在目錄。

例如下面是一個(gè)通過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指令打包,會(huì)在target目錄下生成jar包,并將依賴包拷貝到target/lib目錄下,目錄結(jié)構(gòu)如下:

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

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

方法二:

使用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  
打包后會(huì)在target目錄下生成一個(gè)xxx-jar-with-dependencies.jar文件,這個(gè)文件不但包含了自己項(xiàng)目中的代碼和資源,還包含了所有依賴包的內(nèi)容。所以可以直接通過java -jar來運(yùn)行。

此外還可以直接通過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打包時(shí),執(zhí)行assembly:single,所以可以直接使用mvn package打包。
不過,如果項(xiàng)目中用到spring Framework,用這種方式打出來的包運(yùn)行時(shí)會(huì)出錯(cuò),使用下面的方法三可以處理。

方法三:

使用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目錄下會(huì)生成兩個(gè)jar包,注意不是original-xxx.jar文件,而是另外一個(gè)。和maven-assembly-plugin一樣,生成的jar文件包含了所有依賴,所以可以直接運(yùn)行。
如果項(xiàng)目中用到了Spring Framework,將依賴打到一個(gè)jar包中,運(yùn)行時(shí)會(huì)出現(xiàn)讀取XML schema文件出錯(cuò)。原因是Spring Framework的多個(gè)jar包中包含相同的文件spring.handlers和spring.schemas,如果生成一個(gè)jar包會(huì)互相覆蓋。為了避免互相影響,可以使用AppendingTransformer來對(duì)文件內(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>

以上就是Maven打包的三種方式小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Maven打包方式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringMVC請(qǐng)求流程源碼解析

    SpringMVC請(qǐng)求流程源碼解析

    這篇文章主要介紹了SpringMVC請(qǐng)求流程源碼分析,包括springmvc使用,SpringMVC啟動(dòng)過程及SpringMVC請(qǐng)求過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Spring Boot 端口被占用的解決方法

    Spring Boot 端口被占用的解決方法

    這篇文章主要介紹了解決 Spring Boot 端口被占用的方法詳解,通過本文的介紹,你學(xué)習(xí)了如何解決 Spring Boot 端口被占用的問題。你了解了檢查端口是否被占用、停止占用端口的進(jìn)程、更改應(yīng)用程序的端口號(hào)以及檢查應(yīng)用程序間的端口沖突等方法,需要的朋友可以參考下
    2023-07-07
  • 詳細(xì)講述Java中的對(duì)象轉(zhuǎn)型

    詳細(xì)講述Java中的對(duì)象轉(zhuǎn)型

    在本篇文章里我們給大家詳細(xì)分享了關(guān)于Java中的對(duì)象轉(zhuǎn)型的知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2018-10-10
  • Spring使用注解解決線程并發(fā)問題的多種方案

    Spring使用注解解決線程并發(fā)問題的多種方案

    在?Spring?中,線程并發(fā)問題的核心是共享資源的競(jìng)爭(zhēng),注解本身不能直接解決并發(fā)問題,但?Spring?提供了配套注解結(jié)合并發(fā)編程規(guī)范,可以優(yōu)雅地實(shí)現(xiàn)線程安全控制,下面我會(huì)從最常用的場(chǎng)景出發(fā),講解?Spring?中如何通過注解解決并發(fā)問題,需要的朋友可以參考下
    2026-03-03
  • 關(guān)于ThreadLocal和InheritableThreadLocal解析

    關(guān)于ThreadLocal和InheritableThreadLocal解析

    這篇文章主要介紹了關(guān)于ThreadLocal和InheritableThreadLocal解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • IntelliJ IDEA 最常用的配置圖文詳解

    IntelliJ IDEA 最常用的配置圖文詳解

    這篇文章給大家分享了IntelliJ IDEA 詳細(xì)圖解最常用的配置的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。
    2018-07-07
  • Java編寫網(wǎng)絡(luò)聊天程序?qū)嶒?yàn)

    Java編寫網(wǎng)絡(luò)聊天程序?qū)嶒?yàn)

    這篇文章主要為大家詳細(xì)介紹了Java編寫網(wǎng)絡(luò)聊天程序?qū)嶒?yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java通過Lambda函數(shù)的方式獲取屬性名稱

    Java通過Lambda函數(shù)的方式獲取屬性名稱

    這篇文章主要介紹了通過Lambda函數(shù)的方式獲取屬性名稱,實(shí)現(xiàn)步驟是通過定義一個(gè)函數(shù)式接口, 用來接收lambda方法引用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Java tomcat中的類加載器和安全機(jī)制你了解嗎

    Java tomcat中的類加載器和安全機(jī)制你了解嗎

    這篇文章主要介紹了Tomcat 類加載器的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • SpringBoot解決同名類導(dǎo)致的bean名沖突bean name conflicts問題

    SpringBoot解決同名類導(dǎo)致的bean名沖突bean name conflicts問題

    這篇文章主要介紹了SpringBoot解決同名類導(dǎo)致的bean名沖突bean name conflicts問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論

遂川县| 阿拉善右旗| 清水河县| 乌审旗| 南康市| 库尔勒市| 富顺县| 榆社县| 长宁区| 当雄县| 靖安县| 红河县| 栾城县| 阿拉善右旗| 阿拉尔市| 方正县| 交城县| 昭通市| 徐州市| 阜南县| 科技| 南郑县| 宕昌县| 泾阳县| 兴安县| 江陵县| 新郑市| 神木县| 库车县| 景德镇市| 墨江| 凤山市| 莱阳市| 兰溪市| 凤台县| 海盐县| 阿巴嘎旗| 海南省| 即墨市| 上饶县| 大邑县|