現在、jar-with-dependenciesアセンブリを使用してこのようなjarを作成しています。しかし、私の瓶の名前は少し長いです。
このjarはAS400のRPGプログラムで使用されているため、これらの開発者の生活を少し楽にするために、このjarを短くしたいと思います。しかし、手作業以外では、通常のproject-name-version-classifier-jar-with-dependencies.jar
からjarの名前を変更する方法は見つかりませんでした。 project-name-version-classifier-full.jar
のようなものが欲しい
とにかく、基本的にjar-with-dependenciesアセンブリ記述子をコピーして完全に呼び出すことなくこれを行う方法はありますか?
さらに、クラスパスがアセンブルされていないjarをリポジトリに保存し続けたいと思います。
2つのアーティファクトが必要です。ビルドの対象となる領域を保持する分類子を含むjar。リージョンも含むすべての依存関係を持つjar。
project-name-version-region-full.jar
およびproject-name-version-region.jar
はリポジトリに保存する必要があります。最初の例では、分類子は領域いっぱいであり、2番目では分類子です。後者は機能しています。
finalNameプロパティーを指定して、jarに必要な名前を付け、appendAssemblyId "jar-with-dependencies"サフィックスを避けるためにfalseにする必要があります。
以下の構成では、「test.jar」という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>
更新:コメントに基づいて、組み込み記述子を使用しても機能しません。これは、Assembly-pluginの最近のバージョンのバグによるものだと思います-分類子のサポートが削除されましたが、組み込み記述子を使用するとidが修正されるため、最終的には大雑把な名前になります。
回避策として、 jar-with-dependencies 記述子で使用されるアセンブリ記述子をコピーして、IDを変更できます。
この例では、Assembly IDがfinalNameに追加されるため、region-full.jarの名前が必要な場合は、指定できます。 finalNameをregionとして、アセンブリIDをfullとして。これにより、ターゲットにregion-full.jarという名前のファイルが作成されますが、fullの添付アーティファクトとしてMavenリポジトリにインストールされることに注意してください分類子として使用されます。このIDが他のアセンブリのIDと異なる限り、衝突は発生しません。
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>
src/main/Assemblyのjar-Assembly.xmlは次のようになります。
<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>
別のjar-Assembly.xmlを必要とせずに、pomでこれを直接設定する方法を見つけたと思います。
FinalNameがartifactIdとversionで指定されることを除いて、Richの答えと基本的に同じです。
<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>
ここの投稿と maven docs のいくつかの掘り下げのおかげで、カスタム名で一般的な1回限りの再実行可能なjarアセンブリの次の構成を思いつきました。
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>
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>
これにより、MyJarName.jar
すべての依存関係が同じjarおよび指定されたMain-Class: karlthepagain.MyMain
。
私は正しい方向を示してくれた功績をRichに与えますが、Richが少しずれていたので、私にとってはうまくいった解決策を投稿したかったのです。
私のjar-Assembly.xmlは次のように見えました。これにより、プロファイルにプロパティとして保存された地域のアセンブリIDを変更できました。
<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>
Env-fullが分類子であるproject-name-version-env-full.jarの名前でプロジェクトを構築したため、maven-Assembly-plugin設定でfinalNameパラメーターを使用しませんでした。
Assembly 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>
最終名として${project.build.finalName}
を使用して、元のjarファイルを上書きすることもできます。
<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>