【问题标题】:Java Classloader not loading xml fileJava Classloader不加载xml文件
【发布时间】: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:

  1. 由于我不明白的原因,即使在调用程序时设置了类路径,System.getenv("java.class.path") 也会返回 null。
  2. 文件名看起来有点奇怪,因为我在 Windows 上使用 Cygwin。但是,我已经验证这不是问题。我能够加载存在于 jar 文件中的文件(jar 文件位于类路径中)。

【问题讨论】:

    标签: java xml classpath urlclassloader


    【解决方案1】:

    getResource 方法需要一个“类路径相对名称”。检查一下

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 2014-08-23
      • 2018-07-05
      • 2012-11-11
      • 2014-06-10
      • 1970-01-01
      相关资源
      最近更新 更多