【发布时间】:2016-02-18 13:11:33
【问题描述】:
我遇到了类加载器无法加载类路径中的 xml 文件的问题。
下面的代码首先打印类路径中存在的文件。接下来应该打印我要加载的特定 xml 文件的位置(hbase-site.xml,它存在于类路径中)。
System.out.println("Displaying Class Loader URLs:-");
URLClassLoader ucl = ((URLClassLoader)Thread.currentThread().getContextClassLoader());
for (URL url : ucl.getURLs()) {
System.out.println(url);
}
System.out.println("Reading hbase-site.xml from: " + ucl.getResource("hbase-site.xml"));
我得到如下输出
Displaying Class Loader URLs:-
file:/D:/hbase-master/hbase-master/bin/
file:/D:/hbase-master/hbase-master/conf/hbase-site.xml
file:/C:/Program%20Files/Java/jdk1.8.0_51/lib/tools.jar
file:/D:/hbase-master/hbase-master/hbase-server/target/
Reading hbase-site.xml from: null
我可以看到 hbase-site.xml 在类加载器 URL 列表中得到输出。
但 getResource() 方法无法定位 hbase-site.xml 文件 - 它返回 null。我期待它输出'file:/D:/hbase-master/hbase-master/conf/hbase-site.xml'。我无法理解这一点。请帮忙。
PS:
- 由于我不明白的原因,即使在调用程序时设置了类路径,System.getenv("java.class.path") 也会返回 null。
- 文件名看起来有点奇怪,因为我在 Windows 上使用 Cygwin。但是,我已经验证这不是问题。我能够加载存在于 jar 文件中的文件(jar 文件位于类路径中)。
【问题讨论】:
标签: java xml classpath urlclassloader