1

数時間後、私は次のデバッグをあきらめています。

これは機能します:

URL[] urls = ((URLClassLoader) MyClass.class.getClassLoader()).getURLs();
    URL myURL = null;
    for (URL url : urls) {
        if (url.getPath().endsWith("some.jar")) {
            myURL = url;
    }   
}
System.out.println(myURL);

戻り値

file:/C:/Users/Me/.m2/repository/path/to/some.jar

ただし、次のすべてが返されますnull

MyClass.class.getClassLoader()).getResource("/some.jar");
MyClass.class.getClassLoader()).getResource("some.jar");
MyClass.class.getClassLoader()).getResource("/C:/Users/Me/.m2/repository/path/to/some.jar");
MyClass.class.getClassLoader()).getResource("/path/to/some.jar");

ご覧のとおり、可能であれば、絶対にアドレス指定しないことで、ユーザーのMavenリポジトリーのjarファイルを取得したいと思います。で示されているように、jarはクラスパスにありgetURLs()
ます。しかし、jarを取得するには、どのように対処するgetResource()必要がありますか?

どんな助けでも大歓迎です!

4

2 に答える 2

2

URLClassLoader.getURLs()クラスパスにあるディレクトリとJARへのURLを返します。 クラスパスClassLoader.getResource(String)のリソースを探しています。したがって、クラスパス内のJAR /ディレクトリの1つにが含まれていない限り、これは失敗すると予想されます。some.jar

別の言い方をすれば、some.jarが含まれている場合pkg/thingy.pnggetResource("pkg/thingy.png")成功します。

getResource(String)また、リソースへのURLを返すことにも注意してください...すでに持っているURL myURL

于 2012-03-28T16:26:41.903 に答える
0

私はあなたが欲しいと思う:

MyClass.class.getClassLoader().getResource("path/to/some.jar")

先頭のスラッシュがないことに注意してください。これは、クラスローダーの「ルート」が事実上であると想定していますrepository。URLだけではわかりにくいです。

別の方法は、次を使用することです。

MyClass.class.getResource("/path/to/some.jar")

今回先頭にスラッシュがあることに注意してください。基本的に、クラスローダーには「相対」名の概念はありませんが、クラスにはあります。

于 2012-03-28T16:21:17.710 に答える