Можно ли переименовать Maven jar-with-dependencies?


в настоящее время я использую сборку jar-with-dependencies для создания такой банки. Однако название моей банки немного длинное.

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

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

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

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

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

5 101

5 ответов:

вы можете указать finalName свойства, чтобы дать банку имя, которое вы хотите, и указать, что appendAssemblyId должно быть false, чтобы избежать суффикса" jar-with-dependencies".

конфигурация ниже выведет банку под названием " Тест.банку"

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

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

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

этот пример приведет к тому, что идентификатор сборки будет добавлен к finalName, поэтому, если вам нужно иметь имя области-полный.банку, вы можете указать 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>

и jar-сборку.xml в src / main / assembly выглядит так:

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

Я думаю, что нашел способ настроить это непосредственно в pom без необходимости отдельной сборки jar.XML.

это в основном то же самое, что и ответ Рича, за исключением того, что finalName указывается с помощью artifactId и version.

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

Спасибо за сообщения здесь и некоторые копания в Мэйвен документы Я придумал следующую конфигурацию для общей одноразовой переупакованной исполняемой сборки jar с пользовательским именем.

В пом.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>

в сборке.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.

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

моя jar-сборка.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-assembly, поскольку это создало мой проект с моим project-name-version-env-full.имя банку где env-full был классификатором.

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

это сработало для меня

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