154

私は現在、依存関係のあるjarアセンブリを使用してそのようなjarを作成しています。しかし、私の瓶の名前は少し長いです。

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

基本的に依存関係のあるjarアセンブリ記述子をコピーして完全に呼び出すことなく、これを行う方法はありますか?

さらに、クラスパスをアセンブルせずにjarをリポジトリに保存し続けたいと思います。

2つのアーティファクトが必要です。ビルドの対象となる領域を保持している分類子が入ったjarファイル。リージョンも含むすべての依存関係を持つjar。

project-name-version-region-full.jarproject-name-version-region.jarリポジトリに保存する必要があります。最初の例では、分類子はリージョンフルであり、2番目の例ではリージョンです。後者は機能しています。

4

6 に答える 6

260

finalNameプロパティを指定してjarに必要な名前を付け、「jar-with-dependencies」サフィックスを回避するためにappendAssemblyIdを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>

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

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

この例では、アセンブリIDがfinalNameに追加されるため、region-full.jarという名前が必要な場合は、finalNameをregionとして、アセンブリIDをfullとして指定できます。これにより、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>
于 2009-08-26T14:28:05.763 に答える
40

個別の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>
于 2013-01-19T18:19:52.807 に答える
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

于 2011-03-08T06:10:49.337 に答える
5

${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>
于 2019-07-01T10:49:51.410 に答える
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が分類子であるproject-name-version-env-full.jar名を使用してプロジェクトをビルドしたためです。

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

于 2009-08-26T18:05:11.113 に答える
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>
于 2016-07-21T19:14:44.737 に答える