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

时间:2009-08-25 07:17:25

标签: maven-2 assemblies jar

我使用程序集插件创建了几个包含一些类的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>

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>

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

任何想法?非常感谢你!

2 个答案:

答案 0 :(得分: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>

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

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

答案 1 :(得分:-1)

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

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