Maven jar-with-dependenciesの名前を変更することは可能ですか?


138

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

このjarはAS400のRPGプログラムで使用されているので、開発者が少し楽になるように短くします。しかし、手動以外では、jarの名前を通常の名前に変更する方法が見つかりませんでしたproject-name-version-classifier-jar-with-dependencies.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番目の例ではリージョンです。後者は機能しています。

回答:


227

finalNameプロパティを指定して、jarに希望の名前を付け、appendAssemblyIdをfalseにして、「jar-with-dependencies」サフィックスを回避するように指定できます。

以下の設定は「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>

更新:コメントに基づいて、組み込み記述子を使用しても機能しません。これは、最近のバージョンのアセンブリプラグインのバグによるものだと思います-分類子のサポートを削除しましたが、組み込み記述子を使用する場合、IDは修正されるため、最終的には大規模な名前になります。

回避策として、jar-with-dependencies記述子によって使用されるアセンブリ記述子をコピーし、IDを変更できます。

この例では、finalNameにアセンブリIDが追加されるため、region-full.jarの名前が必要な場合は、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 / 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>

その精巧なリッチに取り組んでいます。基本的に、2つの分類子アーティファクトを格納する必要があります。appendAssemblyIdをオンにすると、3つのアーティファクトがありました。1つは分類子なし、1つは分類子バージョン、もう1つは依存関係付きjarバージョンです。appendAssemblyIDをオフにすると、uber jarが非分類子バージョンにインストールされます。私はこれらの人たちに、彼らがどこのために構築されたかを示すリージョン+フルベースの分類子を使用させる必要があります。残念ながら、分類子タグの追加は機能しません。
マイクコーネル

36

私はこれを個別の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>

8

ここの投稿とMavenドキュメントを掘り下げたおかげで、カスタム名を持つ一般的な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


3

私は、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>

maven-assembly-plugin設定でfinalNameパラメーターを使用しませんでした。これは、env-fullが分類子である私のプロジェクト名-バージョン-env-full.jar名でプロジェクトをビルドしたためです。

アセンブリxmlがビルド内のアイテムによってパラメーター化できることを知ったときの驚きを想像してください。これはまさに私が探していたものでした。


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>

1

${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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.