maven 打包jar文件(含可執行jar包)

最近在研究docker,要打包一個可以獨立執行的jar包,於是研究了很久,對於maven plugin還未深入研究,之後會再次補充此文章,先簡單介紹一下常用的幾種plugin和適用情況

訪問我的個人網站獲取更多文章

項目說明

  • spring framework
  • spring boot

plugin 介紹

spring-boot-maven-plugin

<plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

主要用於運行maven管理的spring-boot應用運行,cmd: mvn spring-boot:run;

* 另外,使用以下方式指定spring-boot-starter-parent,運行mvn package可以打包爲可執行jar包,同時生成.origin結尾的工具包 *

<!--這裏不能使用dependencyManagement的方式,會導致compiler不能正確使用jdk-->
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.5.RELEASE</version>
        <relativePath/>
 </parent>

maven compiler plugin

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <configuration>
             <source>1.8</source>
             <target>1.8</target>
      </configuration>
</plugin>

作用是打包jar包,指定jdk版本等信息

docker-maven-plugin

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- tag::plugin[] -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.3</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!-- end::plugin[] -->
        </plugins>
    </build>

imageName指定了鏡像的名字,本例爲 waylau/docker-spring-boot
dockerDirectory指定 Dockerfile 的位置
resources是指那些需要和 Dockerfile 放在一起,在構建鏡像時使用的文件,一般應用 jar 包需要納入。本例,只需一個 jar 文件。
這個工具主要用來打包jar包同時生成docker的image,需要配合spring-boot-maven-plugin使用

maven-jar-plugin

  <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <configuration>
          <archive>
             <manifest>
                  <mainClass>com.**.**</mainClass>
                  <addClasspath>true</addClasspath>
                  <classpathPrefix>lib/</classpathPrefix>
            </manifest>
          </archive>
     </configuration>
 </plugin>

這個插件的作用是用來修改生成的清單文件 MANIFEST.MF,這個文件是jar包執行所必須的,但是僅使用該plugin則僅僅是在清單文件中添加了mainclass 和classpath,指定的lib目錄實際爲/target目錄下的,所以需要在程序主目錄下運行

mvn dependency:copy-dependencies -DoutputDirectory=target/lib

將所有的依賴jar打包到target/lib下面,這樣jar包可以運行了,但必須和lib目錄放在一個文件夾下面。

以下兩個工具各有所長,不再介紹,對於spring boot的項目,僅需要一個spring-boot-maven-plugin就足夠了,但是對於非spring-boot項目,需要結合多個plugin進行配置

maven-assembly-plugin

maven-shade-plugin

參考鏈接

shade plugin
jar plugin
docker plugin

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章