欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

maven的5種打包方式小結

 更新時間:2024年06月03日 11:45:05   作者:????????健康平安的活著  
本文主要介紹了maven的5種打包方式小結,主要是幾種插件打包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一 問題闡述

1.1 概述 

在講打包方式之前,首先來說最近踩到的坑,在idea新建的maven項目,在pom文件中會自動生成一段插件的管理器:

2.我使用maven打包插件maven-assembly-plugin,將其配置添加到<plugManagement><plugs>.. ..</plugs></plugManagement>中間。

3.執(zhí)行maven 打包后:報沒有主清單,如下圖所示:

將網上查找了個遍,痛苦到懷疑人生,也沒有發(fā)現什么端倪,感覺配置的很正確,并且在eclipse中都在項目中用過。

1.2 原因

先來了解一下pluginManagement:

pluginManagement是表示插件聲明,即你在項目中的pluginManagement下聲明了插件,Maven不會加載該插件,pluginManagement聲明可以被繼承。

pluginManagement一般是用來在父POM中定義,提供給子POM使用,子POM也可以覆蓋這個定義,而且你在父POM中定義了版本之后,子模塊中直接應用groupId和artifactId,而不用指定版本,同時也方便統(tǒng)一管理;而在父POM中的pluginManagement并不會介入到Maven的生命周期。

plugins就是直接引入一個plugin,而且可以綁定到Maven相關的生命周期上。

pluginManagement主要是為了統(tǒng)一管理插件,確保所有子POM使用的插件版本保持一致,類似dependencies和dependencyManagement。

總結一句話:pluginManagement標簽中聲名的plug插件不參與maven的生命周期,不會被加載,但可以通過子類繼承后,子類應用來使用。

這就是為何在plugManagemnet中配置maven-assembly-plugin插件后不起作用,找不到主類的原因。

http://www.dbjr.com.cn/program/322128g7x.htm

1.3 解決辦法

1.將plugManagement標簽里內容清空,自定義的的打包插件配置在</plugmanagement>標簽之外。

2.重新打包,執(zhí)行jar包

執(zhí)行成功ok!

二 Maven常用打包插件

2.1 maven-assembly-plugin插件打包

作用:將自己項目中的代碼和資源,還包含了所有依賴包的內容打成一個jar包。

1.pom文件的配置:如果有plugManagemnet則在其外面添加如下代碼

<!--自定義打包方式-->
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.5.5</version>
    <configuration>
      <archive>
        <manifest>
          <mainClass>com.ljf.test.Ha</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>

2.截圖如下: 

2.生成jar包的結構

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

2.2 maven-shade-plugin插件打包

作用:和maven-assembly-plugin插件的作用一樣,將自己項目的代碼資源以及依賴第三方的資源一起打成一個jar包,不過如果項目中用到spring Framework,用maven-assembly-plugin這種方式打出來的包運行時會出錯,使用maven-shade-plugin插件可以處理這個問題

1.pom文件的配置:如果有plugManagemnet則在標簽外,添加如下代碼

<!--自定義打包方式-->
<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.ljf.test.Ha</mainClass>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

2..執(zhí)行jar包后的結構

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

2.3 maven-jar-plugin和maven-dependency-plugin插件打包

作用:將執(zhí)行jar包和依賴包分開(依賴包放在lib目錄下),且位于同一級目錄

2.3.1 插件功能介紹

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

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

2.3.2 pom文件的配置

1.pom文件的配置:如果有plugManagemnet標簽,則在標簽后面添加如下代碼

<!--自定義打包方式-->
<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.ljf.test.Ha</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>

注意:${project.build.directory}/lib 這個配置不需要修改,拿來即用。這個地方是配置依賴包存儲的位置。“${project.build.directory}“ maven內置的設置無需理會。

2.執(zhí)行jar包后的結構:執(zhí)行jar包后會在target目錄下生成jar包,并將依賴包拷貝到target/lib目錄下

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

2.4 appassembler-maven-plugin插件打包 

作用: 利用Maven的appassembler-maven-plugin插件,就可以實現自動打包成可運行的腳本,還可以跨平臺。(Windows/linux)

1.pom文件的配置

<plugins>
  <!-- 支持java1.8 -->
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
  <!-- -使用UTF-8編碼處理資源文件 -->
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
      <encoding>UTF-8</encoding>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>appassembler-maven-plugin</artifactId>
    <version>1.2</version>
    <executions>
      <execution>
        <id>make-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>assemble</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <repositoryLayout>flat</repositoryLayout>
      <configurationDirectory>conf</configurationDirectory>
      <configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
      <copyConfigurationDirectory>true</copyConfigurationDirectory>
      <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
      <assembleDirectory>${project.build.directory}/${projectname}</assembleDirectory>
      <extraJvmArguments>-Xms256m -Xmx1024m -Xss1024k -XX:PermSize=128M
        -XX:MaxNewSize=256m -XX:MaxPermSize=128m</extraJvmArguments>
      <binFileExtensions>
        <unix>.sh</unix>
      </binFileExtensions>
      <platforms>
        <platform>windows</platform>
        <platform>unix</platform>
      </platforms>
      <repositoryName>lib</repositoryName>
      <programs>
        <program>
          <mainClass>${mainfunction}</mainClass>
          <name>startup</name>
        </program>
      </programs>
    </configuration>
  </plugin>
</plugins>

2.執(zhí)行mave package操作

3. 查看打包結果:

4.進入bin目錄下

5.Windows 下執(zhí)行startup.bat,linux下執(zhí)行startup.sh,如下圖:

6.執(zhí)行腳本時候 后面可以添加參數。

2.5 Springboot+Maven:spring-boot-maven-plugin

 針對springboot和maven集成的項目,打成jar包,則需要使用springboot和maven集成好的打包插件:spring-boot-maven-plugin,例如特別是含有@SpringBootApplication注解的入口啟動程序。截圖如下:

2.pom文件的配置

<plugins>
  <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>1.3.5.RELEASE</version>
    <configuration>
      <mainClass>com.springboot.data.es.App</mainClass>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>repackage</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

3.截圖

 4.使用maven打成jar包:mvn clean package

5.打成jar包的結構,如下

6.執(zhí)行jar包:

參考網址:   http://www.dbjr.com.cn/article/197968.htm

2.6 總結

不管通過何種方式打成jar包執(zhí)行,要想jar包能直接通過java -jar xxx.jar運行,需要滿足:

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

2、要能加載到依賴包。

到此這篇關于maven的5種打包方式小結的文章就介紹到這了,更多相關maven 打包 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中的CompletableFuture詳解

    Java中的CompletableFuture詳解

    這篇文章主要介紹了Java中的CompletableFuture詳解,Future接口(FutueTask實現類)定義了操作異步任務執(zhí)行一些方法,如獲取異步任務的執(zhí)行結果、取消任務的執(zhí)行、判斷任務是否被取消、判斷任務執(zhí)行是否完畢等,需要的朋友可以參考下
    2023-09-09
  • javaweb如何使用華為云短信通知公共類調用

    javaweb如何使用華為云短信通知公共類調用

    這篇文章主要介紹了javaweb使用華為云短信通知公共類調用的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring Security注解方式權限控制過程

    Spring Security注解方式權限控制過程

    這篇文章主要介紹了Spring Security注解方式權限控制過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Spring通過<import>標簽導入外部配置文件

    Spring通過<import>標簽導入外部配置文件

    之前文章里我們講到Spring加載Xml配置文件的細節(jié),那么加載完了我們肯定要解析這個配置文件中定義的元素。這篇我們首先來分析下Spring是如何通過標簽導入外部配置文件的。
    2021-06-06
  • 利用java生成二維碼工具類示例代碼

    利用java生成二維碼工具類示例代碼

    二維碼對現在的人們來說再熟悉不過了,我們在開發(fā)的時候也經常會用到二維碼,下面這篇文章主要給大家介紹了關于利用java生成二維碼工具類的相關資料,文中給了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • SpringBoot?AOP?Redis實現延時雙刪功能實戰(zhàn)

    SpringBoot?AOP?Redis實現延時雙刪功能實戰(zhàn)

    本文主要介紹了SpringBoot?AOP?Redis實現延時雙刪功能實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Struts和servlet不能共存問題解決方法

    Struts和servlet不能共存問題解決方法

    這篇文章主要介紹了Struts和servlet不能共存問題解決方法,共有三種方法,需要的朋友可以參考下。
    2017-09-09
  • Spring Boot利用Java Mail實現郵件發(fā)送

    Spring Boot利用Java Mail實現郵件發(fā)送

    這篇文章主要為大家詳細介紹了Spring Boot利用Java Mail實現郵件發(fā)送,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 了解Java虛擬機JVM的基本結構及JVM的內存溢出方式

    了解Java虛擬機JVM的基本結構及JVM的內存溢出方式

    這篇文章主要介紹了Java虛擬機JVM的基本結構及JVM的內存溢出方式,涉及到Java內存分配相關方面的知識,需要的朋友可以參考下
    2016-01-01
  • java中文傳值亂碼問題的解決方法

    java中文傳值亂碼問題的解決方法

    這篇文章主要為大家詳細介紹了java中文傳值亂碼問題的解決方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評論