2009-08-26 5 views
95

В настоящее время я использую сборку jar-with-dependencies, чтобы создать такую ​​банку. Однако название моей банки несколько длиннее.Можно ли переименовать java-зависимости из maven?

Поскольку этот банщик используется программами RPG на AS400, я бы хотел сократить его, чтобы сделать жизнь немного легче для тех разработчиков. Но, кроме как вручную, я не нашел способ переименовать банку с обычного project-name-version-classifier-jar-with-dependencies.jar. Мне хотелось бы что-то вроде project-name-version-classifier-full.jar

Есть ли все-таки сделать это, не в основном копируя дескриптор сборки jar-with-dependencies и называя его полным?

Кроме того, я хочу продолжать использовать банку без собранного кластера, хранящегося в репозитории.

Мне нужны два артефакта. Банку с моим классификатором, держащим область, для которой предназначена сборка. Банку со всеми зависимостями, которые также включают регион.

project-name-version-region-full.jar и project-name-version-region.jar следует хранить в репозитории. В первом примере классификатор заполняется по региону, во второй - области. Последний работает.

ответ

168

Вы можете указать finalName свойство давать фляге имя, которое вы хотите, и указать, что appendAssemblyId должно быть ложным, чтобы избежать «банку-с-зависимостей» суффикс.

Конфигурация ниже выход будет баночка под названием «test.jar»

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-4</version> 
    <executions> 
    <execution> 
     <id>jar-with-dependencies</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <finalName>test</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Обновление: на основе ваших комментариев, используя встроенный дескриптор не будет работать. Я считаю, что это связано с ошибкой в ​​последних версиях сборщика-подключаемых модулей - они удалили поддержку классификаторов, но идентификатор исправлен, если вы используете встроенный дескриптор, поэтому в итоге вы получаете большое имя.

В качестве обходного пути вы можете скопировать дескриптор сборки, используемый дескриптором jar-with-dependencies, и изменить идентификатор.

Этот пример приведет к сборке ид, добавленный к finalName, так что если вам нужно иметь имя области-full.jar, вы можете указать finalName в области и сборочный ид как полный. Это приведет к созданию файла в целевой зоне region-full.jar, но обратите внимание, что он все равно будет установлен в репозиторий Maven в качестве прикрепленного артефакта с полным, используемым в качестве классификатора. Пока этот идентификатор отличается от этого для вашей другой сборки, не должно быть никакого столкновения.

Конфигурация pom будет выглядеть следующим образом.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-4</version> 
    <executions> 
    <execution> 
     <id>jar-with-dependencies</id> 
     <phase>prepare-package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/jar-assembly.xml</descriptor> 
     </descriptors> 
     <finalName>region</finalName> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

и банка-assembly.xml в SRC/основной/сборке, как это:

<assembly> 
    <id>full</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.outputDirectory}</directory> 
    </fileSet> 
    </fileSets> 
</assembly> 
+1

Ах, appendAssemblyId, как же я скучаю по тебе. Благодаря! –

+0

Работа над этой разработкой Богатые. По сути, мне нужно хранить два артефактов классификатора. С включением appendAssemblyId у меня было 3 объекта, один без классификатора, версия классификатора и версия jar-with-dependencies. с отключенным appendAssemblyID uber jar устанавливается в версию без классификатора. Мне нужно, чтобы эти ребята использовали классификатор region + full based, который говорит, где они были созданы. К сожалению, добавление тега классификатора не работает. –

+0

Просто настройка * appendAssemblyId * to * false * выполнила эту работу. Позволяет сохранить обычное окончательное имя, не переписывая его. –

2

я собираюсь дать Rich кредит указал мне в правильном направлении, но хотел опубликуйте решение, которое сработало для меня, так как Rich's был слегка выключен:

Мой сборщик.XML выглядел так, что позволило сборочному идентификатор для изменения в регионе, который был сохранен в качестве имущества в моем профиле:

<assembly> 
    <id>${env}-full</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
     </dependencySet> 
    </dependencySets> 
    <fileSets> 
     <fileSet> 
     <directory>${project.build.outputDirectory}</directory> 
     </fileSet> 
    </fileSets> 
</assembly> 

Я не использовал параметр finalName в настройках Maven сборки-плагине, как это встроенное мой проект с именем project-name-version-env-full.jar, где env-full был классификатором.

Представьте мое удивление, когда я узнал, что сборка xml может быть параметризована элементами в сборке. Это именно то, что я искал.

8

Благодаря сообщениям здесь и некоторому копанию в maven docs Я придумал следующую конфигурацию для общей одноразовой переупакованной исполняемой сборки фляг с пользовательским именем.

В pom.xml:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
      <id>exe</id> 
      <phase>package</phase> 
      <goals><goal>single</goal></goals> 
      <configuration> 
       <finalName>MyJarName</finalName> 
       <attach>false</attach> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
        <descriptor>assembly.xml</descriptor> 
       </descriptors> 
       <archive> 
        <manifest> 
         <mainClass>karlthepagain.MyMain</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

В assembly.xml:

<assembly> 
    <id>exe</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <unpack>true</unpack> 
      <scope>runtime</scope> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

Это произведет MyJarName.jar со всеми его зависимостей повторно упакованы в ту же банку и указанный Main-Class: karlthepagain.MyMain.

+1

Это фиксировало все мои проблемы, главным образом переименовывая последнюю банку с зависимостями. –

13

Я думаю, что нашел способ настроить это прямо в пом, не требуя отдельного jar-assembly.xml.

Это в основном то же, что и ответ Рича, за исключением finalName указан с артефактом и версией.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <finalName>${project.artifactId}-${project.version}-full</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     <archive> 
      <manifest> 
       <mainClass>com.mycompany.MyMainClass</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-my-jar-with-dependenciess</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+0

Вы прошли долгий путь с момента своего первого ответа, и этот ответ все же помог мне сегодня, так что! ; D – vakio

+1

Я искал решение, подобное вашему, без отдельного файла jar-assembly.xml. Спасибо ... Он отлично работает для меня ... –

+0

Отлично! Пожалуйста :) – vikingsteve

2

Это работало для меня

<build> 
    <finalName>anynameyoulike</finalName> 
    <plugins>   
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs>     
       <appendAssemblyId>false</appendAssemblyId> 
       <archive> 
        <manifest> 
         <mainClass>com.mycompany.MyMainClass</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> <!-- this is used for inheritance merges --> 
        <phase>package</phase> <!-- bind to the packaging phase --> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build>