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

  • Post author:
  • Post category:其他


话不多说,上主题:




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.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>

打包后会在target目录下生成一个xxx-jar-with-dependencies.jar文件,这个文件不但包含了



自己项目中的代码和资源,还包含了所有依赖包的内容



。所以可以直接通过java -jar来运行。

2.生成jar包的结构

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









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>


1.执行jar包后的结构




执行打包后


在target目录下会生成两个jar包,




注意不是original-xxx.jar文件




,而是另外一个。和maven-assembly-plugin一样,生成的jar文件包含了所有依赖,所以可以直接运行。




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



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