2009-08-26 31 views
95

私は現在、このようなjarを作成するためにjar-with-dependenciesアセンブリを使用しています。しかし、私の瓶の名前は少し長いです。maven jar-with-dependenciesの名前を変更することはできますか?

このjarファイルはAS400のRPGプログラムで使用されているので、私はこれらの開発者の生活を少し楽にするために短くしたいと思います。しかし、手作業以外では、私は瓶を通常のproject-name-version-classifier-jar-with-dependencies.jarから名前を変更する方法を見つけませんでした。 project-name-version-classifier-full.jar

基本的にjar-with-dependenciesアセンブリ記述子をコピーして完全に呼び出さないといけませんか?

さらに、リポジトリに格納されたクラスパスを組み立てずに、引き続きjarファイルを作成したいと考えています。

2つのアーティファクトが必要です。ビルドしている地域を保持している私のクラシファイアとの瓶。地域を含むすべての依存関係を持つjarファイル。

project-name-version-region-full.jarおよびproject-name-version-region.jarは、リポジトリに格納する必要があります。最初の例では、分類子は2番目の領域に領域がいっぱいです。後者は働いています。

答えて

168

あなたはjarファイルにしたい名前を与え、そしては「ジャーとの依存関係」接尾辞を避けるために、偽でなければなりませんappendAssemblyIdことを指定するfinalNameプロパティを指定することができます。

意志の出力以下の構成

<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> 

アップデート「test.jar」と呼ばれるjarファイル:内蔵の記述は動作しません使用して、あなたのコメントに基づいて、。最近のバージョンのアセンブリプラグインでは、これがバグだと思っています。分類子のサポートを削除しましたが、組み込み記述子を使用するとidが固定されてしまいます。

回避策として、jar-with-dependencies記述子で使用されているアセンブリ記述子をコピーし、idを変更することができます。あなたは地域full.jarの名前を持っている必要がある場合、あなたはとして地域とアセンブリIDとしてfinalNameを指定することができるように

この例では、finalNameに追加されたアセンブリのIDにつながります完全。これにより、region-full.jarという名前のファイルが作成されますが、添付ファイルとして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 /メイン/アセンブリ内の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> 
+1

ああ、appendAssemblyId、どのように私はあなたを欠場でした私のために働きました。ありがとう! –

+0

その精巧なリッチ作業。本質的に、私は2つのクラシファイアアーチファクトを保存する必要があります。 appendAssemblyIdをオンにして、私は3つのアーティファクト、1つはクラシファイアなし、クラシファイアのバージョン、およびjar-with-dependenciesバージョンを持っていました。 appendAssemblyIDをオフにすると、uber jarが非分類子バージョンにインストールされます。私はこれらの人に地域+全面的なベースの分類子を使用させる必要があります。残念ながら、クラシファイアタグを追加しても機能しません。 –

+0

* appendAssemblyId *を* false *に設定するだけでジョブが終了しました。 正規の最終的な名前を書き換えずにそのまま使用できます。 –

2

私は正しい方向に私を指しための豊富な信用を与えるために行くが、それに望んでいたんだが私のために働いていたソリューションを投稿してください。リッチズはややオフでした。

私の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> 

私は、Mavenのアセンブリ・プラグインの設定でfinalNameパラメータを使用していませんでしたproject-name-version-env-full.jarの名前でenv-fullが分類子であるプロジェクトを作成します。

アセンブリのXMLをビルドの項目でパラメータ化できることを覚えたとき、私の驚きを想像してみてください。これはまさに私が探していたものでした。

8

maven docsの記事のおかげで、私は一般的な一回限りの再パッケージ化された実行可能なjarアセンブリのカスタム名を次のように設定しました。 pom.xmlで

:assembly.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> 
    <id>exe</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <unpack>true</unpack> 
      <scope>runtime</scope> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

その依存関係の全てが同じジャーと指定Main-Class: karlthepagain.MyMainに再パッケージ化してこれがMyJarName.jarを生成します。

+1

これは主に依存関係のある最終的なjarの名前を変更したすべての私の問題を修正しました。 –

13

別の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> 
+0

あなたは最初の答えから長い道のりを歩んできました。そして、その答えは今日も私を助けました! ; D – vakio

+1

別のjar-assembly.xmlファイルを使用せずに、あなたのようなソリューションを探していました。ありがとう... それは私のために完全に動作します... –

+0

素晴らしい!どういたしまして :) – vikingsteve

2

これは

<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> 
関連する問題