Maven-assembly-plugin: пользовательские имена файлов 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.

Любая идея? Большое спасибо!

Ответы

Ответ 1

Стандартные плагины maven предназначены для общей, повторяющейся работы. Они собирают всю информацию из POM, и они умны (в том смысле, что вам не нужно много настраивать).

Если вам нужны специальные задачи, я предлагаю использовать ant плагин, который позволяет вставлять кусок Ant код в POM. Это позволяет вам выполнить jar task.

Ответ 2

Вы можете переместить элемент конфигурации под элементом выполнения объявления плагина. Это означает, что конфигурация будет применена только к этому исполнению. Затем вы можете добавить дополнительные исполнения плагина сборки для других сборок.

Ниже приведен пример модифицированной конфигурации с двумя исполнениями, каждый из которых ссылается на другую сборку:

<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>

С этой конфигурацией в целевом каталоге будут созданы две дополнительные банки (app _business.jar и app _gui.jar), хотя имейте в виду, что если вы устанавливаете проект, будет установлен только последний собранный артефакт (это может быть конечно, проблема).

Чтобы этого избежать, вам нужно будет изменить свойства appendAssemblyId на true. Самое близкое, что вы можете получить в этом случае, - это изменить finalNames на "приложение" и идентификаторы на "gui" и "business", в результате чего упаковываются app-gui.jar и app-business.jar и все артефакты.