Можно ли переименовать 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 ответов:
вы можете указать 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>