1

どうすれば適切に解決できるのかわからない問題があります。起動時にこれらのプラグインを動的にロードするプログラムのプラグインを開発しています。私は通常、メイン プログラムでも使用されている Apache Commons などの依存関係のみを使用するため、これまでのところすべてが非常にうまく機能しています。

今、私はGoogle Guiceで遊んでみましたが、メインプログラムのクラスパスにパッケージがないため、もちろん起動時に NoClassDefFoundError が発生します。問題の解決策を見つけるためにしばらくGoogleを使用しましたが、思いついたのはuber jarを使用することだけでした。それに関する問題は、私が使用している他のプラグインへの依存関係があり、それらすべてを管理する必要があるため、プラグインにそれらをプルしたくないということです。道に迷ってそのマイナー バージョンを更新しなかったために、クラス パスに 2 つの異なる実装が存在することさえあるかもしれません。残念ながら、通常は他のプラグイン用のインターフェースがないため、それを取り入れることはできません.

長いテキスト、短い質問: Maven にファイル内の Guice のみをプルするように指示することは可能ですか? または、さらに良いことに、この問題に対するよりクリーンな解決策はありますか? プロセス全体で何か重要なことを見逃していたのでしょうか?どんな助けでも大歓迎です。

4

2 に答える 2

3

うまくいく解決策を見つけました。このようなシェード プラグインを使用すると、必要な結果が得られます。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <artifactSet>
                    <includes>
                        <include>com.google.inject:guice</include>
                    </includes>
                </artifactSet>
            </configuration>
        </execution>
    </executions>
</plugin>
于 2013-10-24T06:36:11.327 に答える