0

A.jarとB.jarの2つのjarを持つディレクトリ/pluginがあります。どちらにも同じ名前のファイルconfig.xmlがあります。

File file = new File("plugin/");
for (File item: file.listFiles()) {

    if (item.isFile() && item.getName().substring(item.getName().lastIndexOf(".")).equals(".jar")) {
        ClassPathHacker.addFile(item); // classPathHacker adds the jar to classpath

        InputStream is = getClass().getClassLoader().getResourceAsStream("config.xml");
    }
}

ただし、問題は、新しい反復後に新しいconfig.xmlファイルをロードするのではなく、毎回最初のconfig.xmlをロードすることです。この対立を解決する方法は?

4

3 に答える 3

0

クラスパスで、最新のファイルを含むファイルを他のファイルの前に配置します

于 2011-11-25T14:24:42.203 に答える
0

両方のconfig.xmlファイルがロードされていませんか?名前を解決するとき、処理はPATH / CLASSPATHの左側から始まり、リストの最後に到達するか、最初の一致が見つかるまで、一度に1つのトークンを右側に移動することに注意してください。

于 2011-11-25T14:26:23.853 に答える
0

ClassLoader#getResources()すべてのconfig.xmlファイルのURLを取得するために使用します。次に、どちらを使用するかを選択できます。おそらく最後のものが必要になります。

もう1つのオプションは、クラスローダーのハッキングを台無しにせず、 ZipFileを使用して.jarから必要なファイルを直接読み取ることです。

于 2011-11-25T14:26:57.567 に答える