Saya mencoba mendefinisikan properti di super pom kami yang akan digunakan oleh semua proyek anak sebagai tujuan artefak yang dihasilkan.
Untuk ini saya berpikir tentang menggunakan project/build/finalName
namun ini sepertinya tidak berhasil, bahkan untuk pom sederhana:
Perintah
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>
Dan ketika saya mengeksekusi:
$ 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] ------------------------------------------------------------------------
Saya berharap string "pengujian" akan muncul di suatu tempat di nama artefak yang dihasilkan.
Apakah saya salah memahami tujuan "nama akhir"?
java
maven-2
jar
build-automation
Maxim Veksler
sumber
sumber
Jawaban:
Anda mengatur
finalName
properti di bagian konfigurasi plugin:Seperti yang ditunjukkan dalam dokumentasi resmi .
Memperbarui:
Untuk Maven> = 3
Berdasarkan komentar Matthew Anda sekarang dapat melakukannya seperti ini:
Lihat laporan bug / dokumentasi .
sumber
finalName
konfigurasi telah dihapus. Namun metode OP harus bekerja. Lihat issues.apache.org/jira/browse/MJAR-233Semua jawaban yang diberikan lebih rumit daripada yang diperlukan. Dengan asumsi Anda sedang membangun file jar, yang perlu Anda lakukan adalah menambahkan
<jar.finalName>
tag ke<properties>
bagian Anda :Ini akan menghasilkan toples:
Ini ada dalam dokumentasi - perhatikan
User Property
:Penggunaan Baris Perintah
Anda juga harus dapat menggunakan opsi ini di baris perintah dengan:
Anda harus mendapatkan myCustomName.jar, meskipun saya belum menguji ini.
sumber
<jar.finalName>foo</jar.finalName>
membuat dua toples: toples yang dapat dieksekusi termasuk dependensi yang dinamaifoo-${project.version}.jar
dan toples kedua yang hanya berisi nama proyek${project.name}-${project.version}.jar
,<build><finalName>foo</finalName></build>
hanya membuat toples yang dapat dieksekusi termasuk dependensi yang bernamafoo.jar
@ Maxim
coba ini ...
pom.xml
Commnad
mvn clean install
Keluaran
Referensi
sumber
Pada tahap paket, plugin memungkinkan konfigurasi nama file yang diimpor melalui pemetaan file:
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
Jika Anda telah mengonfigurasi versi Anda untuk menjadi 'pengujian' melalui profil atau sesuatu, ini akan bekerja untuk paket perang:
pakar perang-plugin
sumber
Ini bekerja untuk saya
sumber
Pendekatan yang Anda gunakan memang melakukan jar file dengan string 'pengujian' dalam namanya, seperti yang Anda tentukan, tetapi perintah instalasi default mengirimkannya ke direktori ~ / .m2 / repositori Anda, seperti yang terlihat di baris output ini:
Menurut saya Anda mencoba membuat toples dengan nama seperti itu dan kemudian menyalinnya ke direktori pilihan Anda.
Coba gunakan properti outputDirectory seperti yang dijelaskan di sini: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
sumber
groupId/artifactId/version/artifactId-version-classifier.packaging
. finalName hanya berlaku untuk nama file lokal di direktori output.Saya menggunakan yang berikut ini
Dengan cara ini Anda dapat mendefinisikan setiap nilai secara individual atau pragmatis dari Jenkins dari beberapa sistem lain.
Ini akan menempatkan folder
target\{group.id}\projectName-1.2.3.jar
Cara yang lebih baik untuk menghemat waktu mungkin
Suka sama kecuali saya gunakan pada variabel.
Ini akan menempatkan folder
target\{group.id}\projectName-1.2.3.jar
Anda juga dapat menggunakan
outputDirectory
di dalamconfiguration
untuk menentukan lokasi Anda mungkin ingin paket itu berada.sumber
Dalam proyek pakar saya, saya menggunakan:
sumber