Java 从类路径加载配置文件

Java 从类路径加载配置文件,java,classpath,Java,Classpath,我正在努力使我的Java应用程序易于部署到其他计算机上,并且正在编写一个ant脚本来实现这一点,这很好 我在加载jar清单文件中命名的类路径中列出的资源时遇到问题 文件夹结构如下所示: /MyProgram.jar /lib/<dependencies> /config/configuration.xml 将xmlName作为以下所有值的字符串: "config/configuration.xml" "configuration.xml" "config.configuration

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

我在加载jar清单文件中命名的类路径中列出的资源时遇到问题

文件夹结构如下所示:

/MyProgram.jar
/lib/<dependencies>
/config/configuration.xml
将xmlName作为以下所有值的字符串:

"config/configuration.xml"
"configuration.xml"
"config.configuration.xml"
与此相关,我在config目录中还有一个log4j.properties文件。我如何让log4j来取它?其他引用说它只需要在类路径中,并且它也在jar的清单文件中显式命名。有人能给我指出正确的方向吗

更新:

以下是类路径中的实际条目:

Class-Path: <snip dependencies> config/configuration.xml config/log4j.properties
类路径:config/configuration.xml config/log4j.properties

据我所知,log4j.xml应该位于类路径的根目录下

此外,您还可以使用下面的代码脚本读取配置文件。配置目录应该在类路径中

this.xml = this.getClass().getResourceAsStream("/config/configuration.xml"); 

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

this.xml = Thread.currentThread().getContextClassLoader()
             .getResourceAsStream("config.xml");
更好的做法是将您的配置目录包含在MyProgram.jar中。这将防止您需要将其专门添加到类路径中

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

启动应用程序时,可以使用
log4j.configuration
系统属性:

java -Dlog4j.configuration=config/log4j.properties MyApp
请参见“默认初始化过程”下的

关于未拾取的其他配置文件,Manifest.mf文件是什么样子的?你在用类似的东西吗

Class-Path: config/configuration.xml lib/yourLibOne.jar lib/blah.jar

在Manifest.mf文件中?

关于log4j:如果希望它使用与默认配置文件不同的配置文件,可以使用

org.apache.log4j.PropertyConfigurator.configure(...)
此静态方法的变体接受URL、属性或文件名

还有

org.apache.log4j.xml.DOMConfigurator

对于XML文件。

配置XML没有乐趣。。我在问题中添加了类路径条目,这些条目不正确吗?关键是类路径条目是文件夹!这也使得log4j获取了配置文件。谢谢我会将其打包到jar中,但我们希望能够在程序放在实验室计算机上之后编辑配置。
org.apache.log4j.xml.DOMConfigurator