ClassLoader加载错误的文件实例

时间:2012-03-19 16:00:18

标签: java classloader inputstream

所以我看到有一个非常类似于这个问题的帖子,但是我处于这样一种情况:我无权在我的jar中指定这个文件的位置,所以我希望有人知道一个解决方案绕过这个。

所以我目前使用以下代码片段获取文件作为输入流,文件'plugin.xml'位于jar的根目录,我无法更改此位置,因为另一个软件(dynatrace)创建了这个文件并确定其位置。

标准摘录:

InputStream is = JmxPlugin.class.getResourceAsStream("/plugin.xml");

现在我知道问题是ClassLoader正在拾取第一个与类路径名称'Plugin.xml'相匹配的文件(一个不在我的jar中的文件)。

有人能想出一种方法来确保我拿起正确的文件而不必移动它吗?我的类在jar中的相对路径是com / something / jmx / JmxPlugin.class。

(我不必在内存中解压缩jar。)

非常感谢您的贡献,

2 个答案:

答案 0 :(得分:0)

我不是很确定,但似乎Thread.currentThread().getContextClassLoader().getResourceAsStream("/plugin.xml")可能会解决您的问题。如果没有,您必须创建自己的ClassLoader并在那里解决问题。

答案 1 :(得分:0)

简化方法是将类路径中的jar移动为第一个包含Plugin.xml的jar, 另一种方法是使用getResource()来定位你的jar文件:

URL myJar=JmxPlugin.class.getResource("/"+JmxPlugin.class.getName().replace(".","/")+".class");

然后使用此URL打开jar文件并解压缩Plugin.xml。