Я пытаюсь определить свойство в нашем супер-помпе, которое будет использоваться всеми дочерними проектами в качестве места назначения сгенерированного артефакта.
Для этого я думал об использовании, project/build/finalName
но это не похоже на работу, даже для простых poms:
команда
mvn archetype:create \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=com.mycompany.app \
-DartifactId=my-app
POM
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-app</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<finalName>${project.name}-testing</finalName>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
И когда я казнил:
$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building my-app
[INFO] task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /tmp/mvn_test/my-app/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.024 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] [install:install {execution: default-install}]
[INFO] Installing /tmp/mvn_test/my-app/target/my-app-testing.jar to /home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sun Nov 21 18:37:02 IST 2010
[INFO] Final Memory: 17M/162M
[INFO] ------------------------------------------------------------------------
Я ожидаю, что строка «testing» появится где-то в сгенерированном имени артефакта.
Я неправильно понимаю цель "finalName"?
java
maven-2
jar
build-automation
Максим Векслер
источник
источник
Ответы:
Вы устанавливаете
finalName
свойство в разделе конфигурации плагина:Как указано в официальной документации .
Обновить:
Для Maven> = 3
Основываясь на комментарии Мэтью, вы можете сделать это следующим образом:
Смотрите отчет об ошибках / документацию .
источник
finalName
конфигурация была удалена. Однако метод ОП должен работать. См. Questions.apache.org/jira/browse/MJAR-233Все предоставленные ответы являются более сложными, чем необходимо. Предполагая, что вы создаете JAR-файл, все, что вам нужно сделать, это добавить
<jar.finalName>
тег в ваш<properties>
раздел:Это создаст банку:
Это в документации - обратите внимание на
User Property
:Использование командной строки
Вы также должны иметь возможность использовать эту опцию в командной строке с:
Вы должны получить myCustomName.jar, хотя я не проверял это.
источник
<jar.finalName>foo</jar.finalName>
создает два jar-файла: исполняемый jar-файл с именованными зависимостямиfoo-${project.version}.jar
и второй jar -файл, содержащий только названный проект${project.name}-${project.version}.jar
,<build><finalName>foo</finalName></build>
создает только исполняемый jar-файл с именованными зависимостямиfoo.jar
@ Максим
попробуй это ...
pom.xml
Commnad
mvn clean install
Вывод
Ссылка
источник
На этапе упаковки плагин позволяет настраивать имена импортируемых файлов с помощью сопоставления файлов:
Maven-уха плагин
http://maven.apache.org/plugins/maven-ear-plugin/examples/customize-file-name-mapping.html
http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#outputFileNameMapping
Если вы настроили свою версию для «тестирования» через профиль или что-то еще, это будет работать для пакета war:
Maven-плагин войны
источник
Это работает для меня
источник
Подход, который вы использовали, действительно делает файл jar со строкой 'testing' в названии, как вы указали, но команда установки по умолчанию отправляет его в каталог ~ / .m2 / repository, как показано в следующей строке вывода:
Мне кажется, что вы пытаетесь создать банку с таким именем, а затем скопировать ее в каталог по вашему выбору.
Попробуйте использовать свойство outputDirectory, как описано здесь: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
источник
groupId/artifactId/version/artifactId-version-classifier.packaging
. finalName применяется только к локальному имени файла в выходном каталоге.Я использую следующее
Таким образом, вы можете определить каждое значение индивидуально или прагматично из Jenkins какой-либо другой системы.
Это поместит папку
target\{group.id}\projectName-1.2.3.jar
Лучший способ сэкономить время может быть
Как то же самое, за исключением того, что я использую переменную.
Это поместит папку
target\{group.id}\projectName-1.2.3.jar
Вы также можете использовать
outputDirectory
внутри,configuration
чтобы указать местоположение, в котором вы хотите разместить пакет.источник
В моем проекте Maven EE я использую:
источник