Próbuję zdefiniować właściwość w naszym super pomie, która będzie używana we wszystkich projektach podrzędnych jako miejsce docelowe wygenerowanego artefaktu.
Do tego myślałem o użyciu, project/build/finalName
ale to nie wydaje się działać, nawet dla prostych pomponów:
Komenda
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>
A kiedy wykonałem:
$ 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] ------------------------------------------------------------------------
Spodziewałbym się, że gdzieś w nazwie wygenerowanego artefaktu pojawi się napis „testing”.
Czy źle rozumiem cel „finalName”?
java
maven-2
jar
build-automation
Maxim Veksler
źródło
źródło
Odpowiedzi:
finalName
Właściwość ustawiasz w sekcji konfiguracji wtyczki:Jak wskazano w oficjalnej dokumentacji .
Aktualizacja:
Dla Maven> = 3
Na podstawie komentarza Matthew możesz teraz zrobić to w następujący sposób:
Zobacz raport o błędzie / dokumentację .
źródło
finalName
konfiguracja została usunięta. Jednak metoda PO powinna działać. Zobacz issue.apache.org/jira/browse/MJAR-233Wszystkie podane odpowiedzi są bardziej skomplikowane niż to konieczne. Zakładając, że tworzysz plik jar, wszystko, co musisz zrobić, to dodać
<jar.finalName>
tag do swojej<properties>
sekcji:Spowoduje to wygenerowanie słoika:
To jest w dokumentacji - zwróć uwagę na
User Property
:Wykorzystanie wiersza poleceń
Powinieneś także móc użyć tej opcji w wierszu poleceń z:
Powinieneś pobrać myCustomName.jar, chociaż nie testowałem tego.
źródło
<jar.finalName>foo</jar.finalName>
tworzy dwa pliki jar: wykonywalny plik jar zawierający zależności o nazwiefoo-${project.version}.jar
i drugi plik jar zawierający tylko projekt o nazwie${project.name}-${project.version}.jar
,<build><finalName>foo</finalName></build>
tworzy tylko plik jar wykonywalny zawierający zależności o nazwiefoo.jar
@Maxim
spróbuj tego ...
pom.xml
Commnad
mvn clean install
Wynik
Odniesienie
źródło
Na etapie pakietu wtyczka umożliwia konfigurację importowanych nazw plików poprzez mapowanie plików:
maven-ear-plugin
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
Jeśli skonfigurowałeś swoją wersję do `` testowania '' za pośrednictwem profilu lub czegoś podobnego, zadziała to dla pakietu wojennego:
maven-war-plugin
źródło
To działa dla mnie
źródło
Podejście, z którego korzystałeś, rzeczywiście powoduje, że plik jar zawiera w nazwie ciąg `` testing '', tak jak to określiłeś, ale domyślne polecenie instalacji wysyła go do katalogu ~ / .m2 / repository, jak widać w tym wierszu wyjściowym:
Wydaje mi się, że próbujesz wygenerować jar o takiej nazwie, a następnie skopiować go do wybranego katalogu.
Spróbuj użyć właściwości outputDirectory, jak opisano tutaj: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
źródło
groupId/artifactId/version/artifactId-version-classifier.packaging
. finalName dotyczy tylko lokalnej nazwy pliku w katalogu wyjściowym.Używam następujących
W ten sposób możesz zdefiniować każdą wartość indywidualnie lub pragmatycznie z Jenkinsa innego systemu.
Spowoduje to umieszczenie folderu
target\{group.id}\projectName-1.2.3.jar
Może być lepszym sposobem na zaoszczędzenie czasu
Podobnie jak to samo, z wyjątkiem tego, że używam zmiennej.
Spowoduje to umieszczenie folderu
target\{group.id}\projectName-1.2.3.jar
możesz również użyć
outputDirectory
wewnątrz,configuration
aby określić lokalizację, w której pakiet ma się znajdować.źródło
W moim projekcie maven ee używam:
źródło