jar文件中的名称冲突

时间:2011-11-25 14:22:01

标签: java jar name-conflict

我有一个带有两个jar的目录/插件A.jar和B.jar .Both有一个同名的文件,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。如何解决这场冲突?

3 个答案:

答案 0 :(得分:0)

将带有最新文件的文件放在类路径

中的另一文件之前

答案 1 :(得分:0)

您确定它没有加载两个config.xml文件吗?请记住,当解析名称处理从PATH / CLASSPATH的左侧开始并一次向右移动一个标记,直到到达列表的末尾或找到第一个匹配。

答案 2 :(得分:0)

使用ClassLoader#getResources()获取所有config.xml文件的URL。然后你可以选择使用哪一个,可能你需要最后一个。

另一个选择是不要乱用类加载器黑客,只需使用ZipFile

直接从.jar中读取您需要的文件