web-dev-qa-db-ja.com

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

現在、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番目では分類子です。後者は機能しています。

121
Mike Cornell

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>
211
Rich Seller

別の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>
27
vikingsteve

ここの投稿と 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

8
Karl the Pagan

私は正しい方向を示してくれた功績を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がビルド内のアイテムによってパラメーター化できることを知ったときの驚きを想像してください。これはまさに私が探していたものでした。

3
Mike Cornell

これは私のために働いた

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

最終名として${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>
0
Mark Schäfer