【问题标题】:jboss server cannot load WAR with Log4Jjboss 服务器无法使用 Log4J 加载 WAR
【发布时间】:2015-01-27 20:15:40
【问题描述】:

我正在尝试在本地 jboss EAP 6.1 服务器运行的 Maven 项目中使用 Log4J。这是我的 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>pro</artifactId>
    <version>0.0.2-SNAPSHOT</version>
  </parent>
  <groupId>com.company.test</groupId>
  <artifactId>project</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>com.company.test.project</name>

  <dependencies>

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
</dependency>

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.5</version>
</dependency>

  </dependencies>

</project>

我有一个 log4j.xml 文件放在 webapp\WEB-INF-classes 下。似乎 jboss 在加载项目时遇到问题,因为 log4j.xml 包含 SMTP 附加程序:

<appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="From"      value="support@company.com"/>
<param name="SMTPHost"  value="smtp1.server.com"/>
<param name="Subject"   value="Fatal Error"/>
<param name="To"        value="user@company.com"/>
<param name="Threshold" value="FATAL" />
</appender>

当我尝试在本地运行项目时,我收到此错误:

15:07:17,389 ERROR [org.jboss.msc.service.fail] (MSC service thread
1-2) MSC000001: Failed to start service
jboss.deployment.unit."com.company.test.project.war".POST_MODULE:
org.jboss.msc.service.StartException in service
jboss.deployment.unit."com.company.test.project.war".POST_MODULE:
JBAS018733: Failed to process phase POST_MODULE of deployment
"com.company.test.project.war"    at
org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127)
[jboss-as-server-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10]     at
org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
[jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]   at
org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
[jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]   at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[rt.jar:1.7.0_55]     at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[rt.jar:1.7.0_55]     at java.lang.Thread.run(Thread.java:745)
[rt.jar:1.7.0_55] Caused by: java.lang.NoClassDefFoundError:
javax/mail/internet/AddressException  at
java.lang.Class.getDeclaredConstructors0(Native Method)
[rt.jar:1.7.0_55]     at
java.lang.Class.privateGetDeclaredConstructors(Class.java:2493)
[rt.jar:1.7.0_55]     at java.lang.Class.getConstructor0(Class.java:2803)
[rt.jar:1.7.0_55]     at java.lang.Class.newInstance(Class.java:345)
[rt.jar:1.7.0_55]     at
    org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:247)
      at
    org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:176)
      at
    org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:191)
      at
    org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:523)
      at
    org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:492)
      at
    org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:1001)
      at
    org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:867)
      at
    org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:794)
      at
org.jboss.as.logging.LoggingDeploymentUnitProcessor.configure(LoggingDeploymentUnitProcessor.java:295)
[jboss-as-logging-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10]    at
org.jboss.as.logging.LoggingDeploymentUnitProcessor.processDeploymentLogging(LoggingDeploymentUnitProcessor.java:176)
[jboss-as-logging-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10]    at
org.jboss.as.logging.LoggingDeploymentUnitProcessor.deploy(LoggingDeploymentUnitProcessor.java:81)
[jboss-as-logging-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10]    at
org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:120)
[jboss-as-server-7.2.1.Final-redhat-10.jar:7.2.1.Final-redhat-10]     ...
5 more Caused by: java.lang.ClassNotFoundException:
javax.mail.internet.AddressException from [Module
"org.jboss.log4j.logmanager:main" from local module loader @b7e2544
(finder: local module finder @6c09941 (roots:
C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\soa,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\sramp,C:\Users\sobczakm\EAP-6.1\jboss-eap-6.1\modules\system\layers\base))]
  at
org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196)
[jboss-modules.jar:1.2.2.Final-redhat-1]  at
org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:444)
[jboss-modules.jar:1.2.2.Final-redhat-1]  at
org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:432)
[jboss-modules.jar:1.2.2.Final-redhat-1]  at
org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:374)
[jboss-modules.jar:1.2.2.Final-redhat-1]  at
org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:119)
[jboss-modules.jar:1.2.2.Final-redhat-1]  ... 21 more

15:07:17,389 ERROR [org.jboss.as.server] (DeploymentScanner-threads -
1) JBAS015870: Deploy of deployment "com.company.test.project.war" was
rolled back with the following failure message:  {"JBAS014671: Failed
services" =>
{"jboss.deployment.unit.\"com.company.test.project.war\".POST_MODULE"
="org.jboss.msc.service.StartException in service jboss.deployment.unit.\"com.company.test.project.war\".POST_MODULE:
JBAS018733: Failed to process phase POST_MODULE of deployment
\"com.company.test.project.war\"
    Caused by: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException
    Caused by: java.lang.ClassNotFoundException: javax.mail.internet.AddressException from [Module
\"org.jboss.log4j.logmanager:main\" from local module loader @b7e2544
(finder: local module finder @6c09941 (roots:
C:\\Users\\sobczakm\\EAP-6.1\\jboss-eap-6.1\\modules,C:\\Users\\sobczakm\\EAP-6.1\\jboss-eap-6.1\\modules\\system\\layers\\soa,C:\\Users\\sobczakm\\EAP-6.1\\jboss-eap-6.1\\modules\\system\\layers\\sramp,C:\\Users\\sobczakm\\EAP-6.1\\jboss-eap-6.1\\modules\\system\\layers\\base))]"}}

编辑:这是我创建的 jboss-deployment-structure.xml 文件:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

【问题讨论】:

  • 我不了解您的整个开发环境。但看起来,您已经导入了一些 log4j 模块(“org.jboss.log4j.logmanager:main”)。这意味着,您的战争中的 log4j 模块不用于解析 xml-config。后来,module-log4j 找不到类 AddressException 因为它无法访问您的战争库。
  • 请添加 jboss-deployment-structure.xml 或您的 Meta-inf/Manifest.MF 依赖项,具体取决于您定义导入的位置。

标签: maven log4j jboss-eap-6


【解决方案1】:

在 EAP 6.3 中修复了一个错误,该错误将正确的依赖项添加到 EAP 中使用的 log4j 模块。如果您添加以下依赖项$JBOSS_HOME/modules/system/layers/base/org/jboss/log4j/logmanager/main/module.xml,它应该会修复它。

<dependencies>
    <module name="javax.api"/>
    <module name="javax.mail.api" optional="true"/>
    <module name="javax.jms.api" optional="true"/>
    <module name="org.dom4j" optional="true"/>
    <module name="org.jboss.logmanager"/>
    <module name="org.jboss.modules"/>
</dependencies>

另一种选择是使用 jboss-deployment-structure.xml 排除 log4j 并使用您提供的版本。

【讨论】:

  • 我创建了 jboss-deployment-structure.xml 并放在 webapp/WEB-INF 下。我收到以下文件错误:cvc-complex-type.2.3: Element 'deployment' cannot have character [children],因为该类型的内容类型是仅元素。 jboss-deployment-structure.xml /com.company.test.project/src/main/webapp/WEB-INF 第 2 行 XML 问题。我将在上面的问题中粘贴文件的内容。
  • 不知道为什么它不起作用。我刚刚测试过,对我来说效果很好。这是您的 IDE 中的错误吗?
  • 是的,在 IDE 中。我正在使用 JBoss Developer Studio 7.1.1
  • 我认为如果您删除 xmlns 部分,它可能会起作用。它只是找不到架构。
  • 是的,就是这样。我删除了命名空间属性,该文件现在在 IDE 中没有错误。谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-06-15
  • 2021-10-11
  • 2023-03-10
  • 2014-01-14
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多