1

アセンブリプラグインとjarプラグインの両方を使用してアプリケーションをデプロイしています。また、jarプラグインを使用して、マニフェストファイルにクラスパスを生成するのに役立てています。

<addClasspath>true</addClasspath>

それは機能しているように見えますが、jarを実行しようとすると問題が発生します(適切なメインクラスが指定されています)-実際には一時的な依存関係であるライブラリを見つけることができません。したがって、私のプロジェクトAはプロジェクトBに依存し、プロジェクトBはjar Cに依存します。アセンブリプラグインはA、B、およびCを正しく圧縮しますが、jarプラグインはマニフェストにCを含まなかったため、ClassNotFoundExceptionが発生しました。

maven-jar-pluginに、推移的な依存関係が必要であることを指定できるオプションがありません。

私はそれを正しい方法でやっていますか?他の誰かが推移的な依存関係をマニフェストに生成することに成功しましたか?たぶん私は何か間違ったことをしているのか、故障しているのでしょう。助けていただければ幸いです。

4

3 に答える 3

7

私は言及された問題を解決しようとしました。私の場合はうまくいきました(maven-jar-plugin v2.2)。私は3つの子を持つjarloadingと呼ばれる親プロジェクトを持っています:

  • main: に依存する
  • a: b への依存関係あり
  • b: a に依存する

電話した後

mvn package

を含む展開スクリプトを使用して公開する

rm -r ~/Desktop/jarloading-bin
mkdir ~/Desktop/jarloading-bin
cp a/target/a-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
cp b/target/b-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/
cp main/target/main-0.0.1-SNAPSHOT.jar ~/Desktop/jarloading-bin/

ディレクトリへの変更

cd ~/Desktop/jarloading-bin

そして走っている

java -jar main-0.0.1-SNAPSHOT.jar

それはうまくいきました。


しかし実際には、クラスパスがマニフェスト ファイルにどのようにリストされているかがポイントです。

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: rschmid
Build-Jdk: 1.6.0_07
Main-Class: Main
Class-Path: a-0.0.1-SNAPSHOT.jar b-0.0.1-SNAPSHOT.jar

メインプロジェクトの pom.xml:

...
<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <index>true</index>
                    <manifest>
                        <mainClass>Main</mainClass>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>ch.fiftynine.lab</groupId>
        <artifactId>a</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>
...

プロジェクトの pom.xml:

...
<dependencies>
    <dependency>
        <groupId>ch.fiftynine.lab</groupId>
        <artifactId>b</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>
...

b プロジェクトの pom.xml には、特別なことは何も含まれていません。

および添付のソース コードとバイナリ: ソース コード バイナリ

于 2009-07-06T11:08:05.897 に答える
3

maven-jar-pluginを機能させることができず、maven-assembly-pluginを使用する必要がありました。

例:

于 2009-08-13T19:53:09.137 に答える
0

私はちょっと解決することができました... 実際には解決していません。私は詳しくチェックしましたが、一部の推移的な依存関係が取得されない理由はまだわかりません-それらをスキップしているようで、最終的にMANIFESTに生成されません。

少し掘り下げて、maven-dependency-plugin で遊んでみました。驚いたことに、それを構成<attach>true</attach>してフェーズに結び付けることでassembly:assembly、クラスパスの問題が解決しました。

于 2009-07-06T13:00:28.527 に答える