我有一个Java应用程序需要部署在weblogic服务器中。我目前正在为该应用程序制作耳朵文件。我的耳朵文件里面有一个 ejb 罐子。我想将 log4j2 jar 添加到此应用程序。所以我的文件夹结构是
> Project-Name-
> --Ear-Content
> --APP-INF
> --lib -> log4j2 jars
> --classes - > log4j2.xml
> --META-INF->application.xml, MANIFEST.MF, weblogic-application.xml
> --Project-Name.jar
目前,我已经将jars放在APP-INF文件夹/lib和META-INF/应用程序中.xml我已经将jars放在模块中。这是我的应用程序.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'>
<application>
<display-name>ProjectName</display-name>
<description>ProjectName</description>
<module>
<ejb>ProjectName.jar</ejb>
</module>
<module>
<java>lib/log4j-api-2.1.jar</java>
</module>
<module>
<java>lib/log4j-core-2.1.jar</java>
</module>
</application>
但它并没有采用 log4j jars。任何解决方案??
如果您只打包一个应用程序,我强烈建议您使用 war 文件而不是耳朵,因为它更简单。否则,您可能需要将当前Project-Name.jar
打包到战争文件中,然后将其打包到耳朵中。
请参阅类似于此处的教程
也就是说 - 您不需要使用 module
标记显式引用应用程序.xml文件中的 log4j 库。来自甲骨文文档:
存储在 APP-INF/classes 和 APP-INF/lib 下的类和库 可用于企业应用程序中的所有模块。这 应用程序类装入器总是尝试通过以下方式解析类请求 首先查看 APP-INF/classes,然后查找 APP-INF/lib。
最后但并非最不重要的一点是,如果 Weblogic 似乎没有使用您想要的类,而是使用默认值,那么在您的情况下log4j 1.2
vs log4j 2
,您需要在应用程序中设置以下内容.xml告诉 Weblogic 使用哪一个:
<prefer-application-packages>
<package-name>org.apache.log4j.*</package-name>
</prefer-application-packages>