Java包装问题

Java包装问题

问题描述:

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

因此,我有一个bin目录,其中包含我的app.jar,再加上一些属性文件,外加一个lib目录以及所有外部罐。外部容器在app.jar的清单文件中指定的类路径中指定。

现在被已颁布法令,新的结构将是一个bin目录只用app.jar的权力,用lib DIR处于同一水平(即../lib,相对于bin)外部罐子和一个../etc目录配置文件。

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

问题是,现在任何使用log4j的jar都不工作 - 他们没有看到log4j.properties文件 - 因为我怀疑app.jar的类路径不会影响外部jar的类路径(可能?),之前他们发现它只是因为它在'。'中。

有什么想法?

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

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

-Dlog4j.configuration=log4j.properties 

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

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

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

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

更好的解决方案是将其粘贴在etc目录中,然后显式配置log4j以从该位置使用它。你可以使用PropertyConfigurator来做到这一点 - 当你的应用程序启动时,按照文件名,URL,最适合你的方式调用它。