maven插件之间的区别(程序集插件,jar插件,阴影插件)

ilo*_*aAJ 43 java apache plugins jar maven

我是maven的初学者,现在我对这些maven插件之间的区别感到困惑.这些都是创建jar文件吗?现在我的问题是

  1. 每个插件中创建的jar之间有什么区别.(程序集插件,jar-plugin,着色插件)

  2. 每个插件的目的.(程序集,jar插件,阴影插件)

  3. 我知道即使没有指定任何这些插件,一旦输入mvn package就会有一个jar输出.没有这些插件的输出jar和带有这些插件的输出jar有什么区别?TIA

sec*_*ree 73

  1. maven-jar-plugin:此插件提供了构建和签名JAR的功能.但它只是编译src/main/java和下的java文件src/main/resources/.它不包含依赖项JAR文件.
  2. maven-assembly-plugin:此插件将所有依赖项JAR提取到原始类中并将它们组合在一起.它还可以通过指定主类来构建可执行JAR.它适用于仅具有较少依赖性的项目; 对于具有许多依赖项的大型项目,它将导致Java类名冲突.
  3. maven-shade-plugin:它将所有依赖项打包到一个uber-JAR中.它还可以通过指定主类来构建可执行JAR.此插件特别有用,因为它合并特定文件的内容,而不是通过重定位类来覆盖它们.当存在跨JAR具有相同名称的资源文件并且插件尝试将所有资源文件打包在一起时,则需要这样做.

参考:比较:maven插件罐,组装,阴影


Art*_*eda 21

Jar插件

让我们看看以下命令可以告诉我们什么.

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-jar-plugin

它有3个目标help,jartest-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>
Run Code Online (Sandbox Code Playgroud)

程序集插件

这个用途不同.它有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(外部配置,本机依赖等),那么你应该去装配插件.