我是maven的初学者,现在我对以下3个Maven插件之间的区别感到困惑:
maven-汇编-插件
maven-shad-plugin
所有这些都创建jar文件吗?如果是,它们创建的Jar文件之间有什么区别?每个插件的目的是什么,应该在什么上下文中使用它们?
参考:比较:maven插件jar,汇编,阴影
Jar插件
让我们看看下面的命令能告诉我们什么。
mvn帮助:描述-Dplugin=org. apache.maven.plugins:maven-jar-plugin
它有3个目标,help
,jar
和test-jar
。我相信您最感兴趣的是jar
目标,根据描述,它执行以下操作:
从当前项目构建一个JAR。
附带说明一下,在打包设置为jar
的项目上执行mvn help: effity-pom
,表明该插件是自动配置的,并在包
阶段执行。
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>default-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
汇编插件
这个有不同的目的。它有8个目标,但其中6个已被弃用。因此,除了help
目标之外,这给我们留下了单个
目标。
mvn帮助:描述-Dplugin=org. apache.maven.plugins:maven-汇编插件
从程序集描述符组装应用程序包或发行版。此目标适用于绑定到生命周期或直接从命令行调用(前提是所有必需的文件在构建开始之前可用,或者由命令行上在此之前指定的另一个目标生成)。
当您想要交付的不仅仅是项目的工件(JAR、WAR等)时,您可以使用程序集插件,但配置位于另一个文件中。
阴影插件
对主要目标的描述有点令人失望。
mvn帮助:描述-Dplugin=org. apache.maven.plugins:maven-shad-plugin
Mojo执行着色委托给着色器组件。
如果您想生成一个超级jar,您最想使用这个插件,它是您在JAR中的工件,其中包含所有传递依赖项。
基本上,如果你正在构建一个库,你将坚持使用默认的JAR插件。如果你正在构建一个应用程序,你可以考虑使用阴影插件,尽管对我来说,它有点快速和肮脏。如果超级jar不是你的口味,或者发行版不适合单个JAR(外部配置、本地依赖项等),那么你应该选择汇编插件。