Maven-assembly-plugin:自定义jar文件名

Syn*_*nox 16 maven-2 assemblies jar

我使用程序集插件创建了几个包含一些类的jar.我需要生成的罐子的自定义名称:app_business.jar app_gui.jar core.jar等.

目前我必须遵循以下配置:

    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <appendAssemblyId>false</appendAssemblyId>
    <finalName>app_business</finalName>
        <descriptors>
            <descriptor>assembly.xml</descriptor>
        </descriptors>
        <attach>true</attach>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

一个assembly.xml文件:

    <assembly>
      <id>app_business</id>
      <formats>
        <format>jar</format>
      </formats>
      <baseDirectory>target</baseDirectory>
      <includeBaseDirectory>false</includeBaseDirectory>

      <fileSets>
        <fileSet>
          <directory>${project.build.outputDirectory}</directory>
          <outputDirectory></outputDirectory> 
          <includes>
            <include>org/xyz/**</include>
          </includes>
        </fileSet>    
      </fileSets>
    </assembly>
Run Code Online (Sandbox Code Playgroud)

这会创建一个完美的文件app_business.jar.但我不知道如何创建我的其他文件.选项appendAssemblyId对我没有帮助,因为它以AppName-app_business.jar格式创建文件名.我真的需要确切的文件名app_business.jar.

任何的想法?非常感谢你!

Ric*_*ler 39

您可以将配置元素移动到插件声明的执行元素下面.这意味着配置将仅应用于该执行.然后,您可以为其他程序集添加程序集插件的其他执行.

以下是具有两个执行的修改配置的示例,每个执行引用不同的程序集:

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <id>make-business-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <appendAssemblyId>false</appendAssemblyId>
        <finalName>app_business</finalName>
        <descriptors>
          <descriptor>src/main/assembly/business-assembly.xml</descriptor>
        </descriptors>
        <attach>true</attach>
      </configuration>
    </execution>
    <execution>
      <id>make-gui-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <appendAssemblyId>false</appendAssemblyId>
        <finalName>app_gui</finalName>
        <descriptors>
          <descriptor>src/main/assembly/gui-assembly.xml</descriptor>
        </descriptors>
        <attach>true</attach>
      </configuration>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

使用此配置,将在目标目录中创建另外两个jar(app _business.jar和app _gui.jar),但要注意,如果安装项目,则只会安装最后组装的工件(这当然可以是问题).

要避免这种情况,您需要将appendAssemblyId属性更改为true.在这种情况下,您可以获得的最接近的是将finalNames更改为"app",将ID更改为"gui"和"business",从而打包app-gui.jar和app-business.jar并安装所有工件.


Aar*_*lla -2

标准 Maven 插件适用于一般的重复性工作。它们从 POM 收集所有信息,并且它们很聪明(从某种意义上说,您不需要进行太多配置)。

如果您需要特殊任务,那么我建议使用ant 插件,它允许您在 POM 中嵌入一段 Ant 代码。这允许您运行jar 任务

  • @Synox,你不应该避免 antrun 插件,它对于填补 Maven 中的空白非常有用,而无需滚动你自己的插件。我只是倾向于发现,当有更多 Mavenic(?无论如何,Pythonic 的 Maven 等价物)方法可以做到这一点时,人们就太热衷于使用它了。在这种情况下,我认为程序集插件*应该*更适合,但正如您从我的回答中看到的那样,它似乎仍然存在一些问题,无法完全按照OP想要的方式工作。 (3认同)