3

我有一个需要部署在 weblogic 服务器中的 java 应用程序。我目前正在为该应用程序制作 ear 文件。我的耳朵文件里面有一个ejb jar。我想将 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

目前我已将罐子放在 APP-INF 文件夹/lib 和 META-INF/application.xml 中,我已将罐子放在模块中。这是我的 application.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 罐子。有什么解决办法??

4

1 回答 1

0

如果您只打包一个应用程序,我强烈建议您使用 war 文件而不是 ear,因为它更简单。否则,您可能需要将您的 current 打包Project-Name.jar到一个 war 文件中,然后将其打包到 ear 中。

请参阅此处的教程

也就是说 - 您不需要在 application.xml 文件中使用module标签显式引用 log4j 库。来自Oracle 文档

存储在 APP-INF/classes 和 APP-INF/lib 下的类和库可供企业应用程序中的所有模块使用。应用程序类加载器总是尝试通过首先查看 APP-INF/classes,然后是 APP-INF/lib 来解析类请求。

最后但并非最不重要的一点是,如果 Weblogic 似乎没有使用您想要的类,而是使用默认值,在您的情况下log4j 1.2vs log4j 2,您将需要在 application.xml 中设置以下内容以告诉 Weblogic 使用哪一个:

<prefer-application-packages>
    <package-name>org.apache.log4j.*</package-name>
</prefer-application-packages>
于 2014-12-15T18:43:51.380 回答