Java包装问题

时间:2009-10-13 07:23:44

标签: java classpath

我有一个我开发的应用程序。目前,它与我的应用程序在同一个目录中部署了所有配置文件(包括log4j.properties,我使用的一些外部库)。

所以,我有一个bin目录,包含我的app.jar,加上一些属性文件,以及一个带有我所有外部广告的lib目录。外部jar在app.jar的清单文件中指定的类路径中指定。

现在已经颁布的权力规定,新结构只有bin dir,只有app.jarlib dir处于同一级别(即{{1}外部jar的相对于../lib的}}和配置文件的bin目录。

很简单,我想 - 我将所有类路径路径从../etc更改为./lib/<jarname>,并将../lib/<jarname>添加到类路径中。

问题是现在任何使用log4j的jar都不起作用 - 他们看不到../etc文件 - 因为我怀疑log4j.properties的类路径不会影响外部罐子的类路径(也许?),以前他们只是因为它在'。'而找到它。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

只要log4j.properties位于类路径中,就可以将其放在任何位置。因此,正如@skaffman建议的那样,将log4j属性文件放在已存在于类路径中的etc目录中。

使用PropertyConfigurator的另一种方法是在运行应用程序时设置此syetm属性。

-Dlog4j.configuration=log4j.properties

答案 1 :(得分:0)

那么,问题是Log4J现在不再自动找到配置文件(log4j.properties)了吗?

据我所知,Log4J默认查找log4j.properties文件的类路径中的目录。尝试在JAR的清单文件中的类路径中添加../etc目录。

另请参阅Log4J手册中的Default Initialization Procedure,它解释了Log4J如何查找配置文件以及如何更改此配置文件。

答案 2 :(得分:0)

log4j.properties必须位于默认包中,在您的情况下,可能意味着在该jar文件的根目录中的某个JAR文件中。

更好的解决方案是将其粘贴到etc目录中,然后显式配置log4j以从该位置使用它。您可以使用PropertyConfigurator执行此操作 - 在您的应用程序启动时,通过文件名,URL,最适合您的方式调用它。