maven的5种打包方式,终有一款适合你(一)

话不多说,上主题:

1.1概述

在讲打包方式之前,首先来说最近踩到的坑,在idea新建的maven项目,在pom文件中会自动生成一段插件的管理器:

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

执行maven 打包后:报没有主清单

将网上查找了个遍,痛苦到怀疑人生,也没有发现什么端倪,感觉配置的很正确,并且在eclipse中都在项目中用过。

在当天例会将问题抛出,会后同样的配置在晓晨的机器上,执行成功了,不和思议,不知道错在那?后来进过分析验证,找到原因。

1.2 原因

先来了解一下pluginManagement

pluginManagement是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManagement声明可以被继承。

pluginManagement一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。

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

pluginManagement主要是为了统一管理插件,确保所有子POM使用的插件版本保持一致,类似dependencies和dependencyManagement。

总结一句话:pluginManagement标签中声名的plug插件不参与maven的生命周期,不会被加载,但可以通过子类继承后,子类应用来使用。

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

https://blog.csdn.net/qq_15266291/article/details/77198073

1.3 解决办法

1.在plugMangement标签下,自定义自己的打包插件配置

2.重新打包,执行jar包

执行成功ok!

二 Maven常用打包插件

2.1maven-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>

打包后会在target目录下生成一个xxx-jar-with-dependencies.jar文件,这个文件不但包含了自己项目中的代码和资源,还包含了所有依赖包的内容。所以可以直接通过java -jar来运行。

2.生成jar包的结构

https://blog.csdn.net/daiyutage/article/details/53739452

2.2maven-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>

1.执行jar包后的结构

执行打包后在target目录下会生成两个jar包,注意不是original-xxx.jar文件,而是另外一个。和maven-assembly-plugin一样,生成的jar文件包含了所有依赖,所以可以直接运行。

未完见下一篇...............................................


版权声明:本文为u011066470原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。