我正在努力使我的Java应用程序易于部署到其他计算机,并正在编写一个ant脚本来做到这一点,这很好。

我在加载jar list 文件中命名的类路径中列出的资源时遇到了麻烦。

文件夹结构如下所示:

/MyProgram.jar
/lib/<dependencies>
/config/configuration.xml

我一生无法使用ClassLoader访问configuration.xml文件。它以及所有依赖项在 list 文件的Class-Path条目中明确列出。

我尝试了以下多种变体:
this.xml = Thread.currentThread().getContextClassLoader()
                 .getResourceAsStream(xmlName);

this.xml = this.getClass().getResourceAsStream(xmlName);

使用xmlName作为以下所有值的字符串:
"config/configuration.xml"
"configuration.xml"
"config.configuration.xml"

与此相关的是,我在config目录中也有一个log4j.properties文件。如何获取log4j来拾取它?其他引用资料说,它只需要在类路径中,并且在jar的 list 文件中也已明确命名。有人可以指出我正确的方向吗?

更新:

这是来自Class-Path的实际条目:
Class-Path: <snip dependencies> config/configuration.xml config/log4j.properties

最佳答案

类路径条目应该是目录或jar文件,而不是单个文件。尝试将您的类路径更改为指向config目录,而不是指向单个配置文件。

this.xml = Thread.currentThread().getContextClassLoader()
             .getResourceAsStream("config.xml");

更好的是将您的配置目录包括在MyProgram.jar中。这样可以避免您需要将其专门添加到类路径中。
this.xml = Thread.currentThread().getContextClassLoader()
             .getResourceAsStream("/config/configuration.xml");

09-30 17:30
查看更多