ClassPath
要素のみを含むJARを使用してJavaアプリケーションのクラスパスを構築すると、私は奇妙な動作に遭遇しました。ClassPath
要素に記載されているJARからクラスをロードできますが、欠けている。JARからクラスをロードできますが、リソースをロードできないのはなぜですか?
例:私のfull-classpath.jar
は、通常のコンテンツと、このラインでちょうどMETA-INF/MANIFEST.MF
が含まれています
ClassPath: foo-service.jar bar-service.jar service-main.jar
service-main.jar
はcom.pany.project.Main
が含まれています。
java -cp full-classpath.jar com.pany.project.Main
を実行すると、それが動作します。
しかしfoo-service.jar
とbar-service.jar
は、私はMavenのユニットテストからjava.util.ServiceLoader
を呼び出すと、それはfoo
とbar
サービスの両方を見ることができますMETA-INF/services/....
でサービス定義が含まれています。私がjava -cp full-classpath.jar com.pany.project.Main -service foo
になると、ログに空のサービスリストが表示されます。
さらに悪いことに、私がMain.class.getClassLoader().getResources("META-INF/MANIFEST.MF")
と呼ぶと、full-classpath.jar
からマニフェストのみが得られます。他の3つのJARからのマニフェストファイルが見つからないので、これらのJARからクラスをロードできるので意味がありません。私はクラスパス全体を手動で構築するときにも動作します。 full-classpath.jar
のClassPath
要素を使用すると失敗します。
何が間違っている可能性がありますか、これをどのようにデバッグすることができますか?私は、Java 8