Anda dapat menetapkan properti finalName untuk memberi jar nama yang Anda inginkan, dan menetapkan bahwa appendAssemblyId harus salah untuk menghindari sufiks "jar-with-dependencies".
Konfigurasi di bawah ini akan menampilkan jar yang disebut "test.jar"
<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>
Pembaruan: berdasarkan komentar Anda, menggunakan deskriptor internal tidak akan berfungsi. Saya yakin ini disebabkan oleh bug dalam versi terbaru dari plugin-assembly - mereka telah menghapus dukungan untuk pengklasifikasi, tetapi id diperbaiki jika Anda menggunakan deskriptor bawaan, jadi Anda akan mendapatkan nama yang besar.
Sebagai solusinya, Anda dapat menyalin deskriptor assembly yang digunakan oleh deskriptor jar-with-dependencies dan mengubah id.
Contoh ini akan menghasilkan id assembly yang ditambahkan ke finalName, jadi jika Anda perlu memiliki nama region-full.jar , Anda dapat menentukan finalName sebagai region dan id assembly sebagai full . Ini akan menghasilkan file dalam target yang disebut region-full.jar, tetapi perhatikan bahwa file itu masih akan diinstal ke repositori Maven sebagai artefak terlampir dengan full digunakan sebagai pengklasifikasi. Selama id ini berbeda dengan yang untuk perakitan Anda yang lain, seharusnya tidak ada tabrakan.
Konfigurasi pom akan terlihat seperti ini.
<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>
dan jar-assembly.xml di src / main / assembly seperti ini:
<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>
Saya rasa saya telah menemukan cara untuk mengkonfigurasi ini langsung di pom tanpa memerlukan jar-assembly.xml terpisah.
Ini pada dasarnya sama dengan jawaban Rich, kecuali finalName ditentukan dengan artifactId dan versinya.
<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>
sumber
Berkat posting di sini dan beberapa penggalian di dokumen maven, saya telah menemukan konfigurasi berikut untuk perakitan jar yang dapat dieksekusi satu kali yang dikemas ulang dengan nama khusus.
Dalam pom.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>
Di assembly.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>
Ini akan menghasilkan
MyJarName.jar
dengan semua dependensinya dikemas ulang ke dalam toples yang sama dan yang ditentukanMain-Class: karlthepagain.MyMain
.sumber
Saya akan memberi penghargaan kepada Rich karena telah mengarahkan saya ke arah yang benar, tetapi ingin memposting solusi yang berhasil untuk saya karena milik Rich sedikit salah:
Jar-assembly.xml saya terlihat seperti ini yang memungkinkan id assembly berubah untuk wilayah yang disimpan sebagai properti di profil saya:
<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>
Saya tidak menggunakan parameter finalName dalam pengaturan maven-assembly-plugin karena ini membangun proyek saya dengan nama proyek-name-version-env-full.jar saya di mana env-full adalah pengklasifikasi.
Bayangkan betapa terkejutnya saya ketika saya mengetahui bahwa assembly xml dapat dijadikan parameter oleh item dalam build. Inilah yang saya cari.
sumber
Ini berhasil untuk saya
<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>
sumber
Dimungkinkan juga untuk menimpa file jar asli dengan menggunakan
${project.build.finalName}
nama akhir:<plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <finalName>${project.build.finalName}</finalName> <appendAssemblyId>false</appendAssemblyId> </configuration> </plugin>
sumber