Maven-assembly-plugin: пользовательские имена файлов jar - PullRequest
16 голосов
/ 25 августа 2009

Я использую плагин сборки для создания нескольких 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 ]

39 голосов
/ 25 августа 2009

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

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

<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», а идентификаторы на «gui» и «business», что приведет к упаковке app-gui.jar и app-business.jar и установке всех артефактов.

0 голосов
/ 25 августа 2009

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

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

...