我是maven的初学者,现在我对这些maven插件之间的区别感到困惑。这些都是创建jar文件吗?现在我的问题是
发布于 2017-04-17 01:36:21
maven-jar-plugin:这个插件提供了构建和签名JAR的能力。但是它只是编译了src/main/java和src/main/resources/下的java文件。它不包括依赖项JAR文件。maven-assembly-plugin:这个插件将所有依赖JAR提取到原始类中,并将它们分组。它还可以通过指定主类来构建可执行的JAR。它只在依赖关系较少的项目中工作;对于具有许多依赖项的大型项目,它将导致Java类名发生冲突。maven-shade-plugin:它将所有依赖项打包到一个uber-JAR中。它还可以通过指定主类来构建可执行的JAR。这个插件特别有用,因为它合并了特定文件的内容,而不是用重新定位类覆盖它们。当有跨JAR具有相同名称的资源文件并且插件试图将所有资源文件打包在一起时,就需要这样做。发布于 2016-07-25 00:16:34
让我们看看下面的命令能告诉我们什么。
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-jar-plugin
它有3个目标,help,jar和test-jar。我相信您最感兴趣的是jar目标,根据描述,目标如下:
从当前项目构建一个JAR。
顺便提一句,在一个打包为jar的项目上执行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
执行阴影委托给Shader组件的Mojo。
如果您想要生成一个uber- JAR,它是JAR中包含所有传递依赖项的工件,那么您主要希望使用这个插件。
最基本的是,如果您正在构建一个库,您将坚持默认的JAR插件。如果你正在构建一个应用程序,你可以考虑使用遮阳插件,尽管对我来说,它是一种快速和肮脏。如果uber-jar不是您的口味,或者发行版无法适应单个JAR (外部配置、本机依赖等)那么你应该选择组装插件。
https://stackoverflow.com/questions/38548271
复制相似问题