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