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

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值