2011-09-14 4 views
8

で発現させるクラスパスを追加します。は、私は次のカスタムアセンブリを持つカスタムアセンブリ・ディスクリプタ

<assembly> 
    <id>full</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
    </fileSets> 
</assembly> 

そして、次の構成セクション:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/assembly.xml</descriptor> 
     </descriptors> 
     <archive> 
      <manifest> 
       <mainClass>com.example.MyExample</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>./lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Mavenのアセンブリのプラグインのドキュメントによると、これをクラスパス項目をマニフェストファイルに追加する必要がありますが、動作しません。単一ではなく廃止予定のアセンブリ目的を使用すると、動作します。

アーカイブセクションがjarフォーマットでのみ利用可能であると言われていた人がいましたが、それは私が使用しているものです。

アセンブリ:アセンブリを非推奨にしたとき、これは正しくこれを行うための新しい方法を定義しましたか?非難された機能を使用するのは本当に好きではありませんが、問題が解決して正しく文書化されない場合は、これを回避する方法がわかりません。

これを正しく行う方法の例はありますか?

答えて

4

これはアセンブリプラグインを使用するのには適していません。 Javaはjars-in-jarsを実行しません。 maven-jar-pluginの設定オプションを使用してメインパスのマニフェストにクラスパスを追加し、アセンブリプラグインを使用して依存関係を収集し、zipまたはtarballのメインjarの隣にドロップすることができます。

http://maven.apache.org/shared/maven-archiver/examples/classpath.html

+0

私はjarから依存関係を削除し、jarファイルと一緒にlibフォルダに置いています。しかし、まだ問題は残っている。アセンブリプラグインは指定されたクラスパスを追加しません。 – davija

+0

これは想定されていません。 jarプラグインにはその仕事があります。 – bmargulies

+3

アセンブリプラグインのドキュメントによると、クラスパスを追加するよう指示した場合、それは行います。これは現在廃止されている他の目標でも機能します。ドキュメントを確認してください – davija

2

あなたはMavenのjarファイルプラグインを使用する必要があります。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>main class</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 
2

は、バージョン2.5以降にmaven-assembly-pluginをアップデートしてみてください。

マニフェストファイルに予期しないClass-Pathエントリが存在しないと思われるのは、バグMASSEMBLY-576です。このバグはプラグインのバージョン2.5(2014年10月26日にリリース)で修正されました。

+0

は役に立たなかった、まだ2.5クラスパスにアップグレードされていない:( – sloven

関連する問題