maven 插件之间的区别(汇编插件、jar 插件、阴影插件)
我是maven的初学者,现在我对这些maven插件之间的区别感到困惑。这些都是创建jar文件吗?现在我的问题是
在每个插件中创建的jar有什么区别。( 汇编插件, jar-plugin, shaded plugin)
每个插件的用途。( 汇编, jar 插件, 阴影插件 )
我知道即使没有指定任何这些插件,一旦类型mvn包,也会有一个jar输出。没有这些插件的输出罐和没有这些插件的输出罐有什么区别?断续器
我是maven的初学者,现在我对这些maven插件之间的区别感到困惑。这些都是创建jar文件吗?现在我的问题是
在每个插件中创建的jar有什么区别。( 汇编插件, jar-plugin, shaded plugin)
每个插件的用途。( 汇编, jar 插件, 阴影插件 )
我知道即使没有指定任何这些插件,一旦类型mvn包,也会有一个jar输出。没有这些插件的输出罐和没有这些插件的输出罐有什么区别?断续器
maven-jar-plugin
:此插件提供了构建和签署 JAR 的功能。但它只是编译 和 下的 java 文件。它不包括依赖项 JAR 文件。src/main/java
src/main/resources/
maven-assembly-plugin
:此插件将所有依赖项 JAR 提取到原始类中,并将它们组合在一起。它还可以通过指定主类来用于构建可执行 JAR。它仅在依赖项较少的项目中工作;对于具有许多依赖项的大型项目,它将导致 Java 类名发生冲突。maven-shade-plugin
:它将所有依赖项打包到一个uber-JAR中。它还可以通过指定主类来用于构建可执行 JAR。这个插件特别有用,因为它合并了特定文件的内容,而不是通过重新定位类来覆盖它们。当存在跨 JAR 具有相同名称的资源文件并且插件尝试将所有资源文件打包在一起时,这是必需的。让我们看看以下命令可以告诉什么。
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-jar-plugin
它有3个目标,和。我相信你最感兴趣的是目标,根据描述,它做了如下:help
jar
test-jar
jar
从当前项目构建 JAR。
作为旁注,在打包设置为 的项目上执行表明此插件是自动配置的,并在该阶段执行。mvn help:effective-pom
jar
package
<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
single
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-assembly-plugin
从程序集描述符组装应用程序捆绑包或分发包。此目标适用于绑定到生命周期或直接从命令行调用(前提是所有必需的文件在生成开始之前都可用,或者由命令行上在此目标之前指定的另一个目标生成)。
当您想要交付比项目工件(JAR,WAR等)更多的内容时,可以使用汇编插件,但配置在另一个文件中。
主要目标的描述有点令人失望。
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-shade-plugin
执行着色委派给着色器组件的 Mojo。
如果你想生成一个uber-jar,你最想使用这个插件,这是你在JAR中的工件,里面有它的所有传递依赖关系。
基本上,如果你正在构建一个库,你会坚持使用默认的JAR插件。如果你正在构建一个应用程序,你可以考虑使用shade插件,尽管对我来说,它有点快速和肮脏。如果uber-jar不是你的口味,或者发行版不能放在单个JAR中(外部配置,本机依赖项等),那么你应该选择汇编插件。