将Rampart添加到POM的依赖项时出现IllegalAccessError

时间:2011-06-01 16:54:32

标签: java classpath weblogic-10.x manifest.mf rampart

我们尝试将Rampart添加到我们模块的POM文件中,然后我们ear无法再从以下异常开始:

java.lang.IllegalAccessError: tried to access method org.apache.log4j.Logger.<init>(Ljava/lang/String;)V from class org.apache.log4j.spi.RootLogger
        at org.apache.log4j.spi.RootLogger.<init>(RootLogger.java:43)
        at org.apache.log4j.LogManager.<clinit>(LogManager.java:78)
        at org.apache.log4j.xml.XMLWatchdog.doOnChange(DOMConfigurator.java:862)
        at org.apache.log4j.helpers.FileWatchdog.checkAndConfigure(FileWatchdog.java:88)
        at org.apache.log4j.helpers.FileWatchdog.<init>(FileWatchdog.java:57)
        at org.apache.log4j.xml.XMLWatchdog.<init>(DOMConfigurator.java:853)
        at org.apache.log4j.xml.DOMConfigurator.configureAndWatch(DOMConfigurator.java:584)

org.apache.log4j.Logger在两个罐子中定义 - log4jlog4j-over-slf4j。 在log4j中 - 有一个构造函数:

protected Logger(String name)

log4j-over-slf4j中有一个构造函数:

Logger(String name) //Package access only

由于某种原因,Rampart似乎触发了错误的类路径顺序并将log4j-over-slf4j放在log4j之前。

然而,最令人不安的问题是我们无法更改我们的ear清单以更改顺序 - 所以最终我们通过将log4j jar添加到系统类路径

我的问题分为两部分:

  1. Rampart问题是否熟悉,是否有解决方案?
  2. 这是什么原因 改变耳朵的清单 不会影响类路径? (我 没经验过 应用服务器 - 如此明显 欢迎回答)
  3. 我们正在使用Weblogic 10.3Rampart 1.5.1。我们正在使用Maven来编译和构建ear文件 - 我今天刚刚学习了mar文件,所以对此的任何输入也会受到欢迎。

2 个答案:

答案 0 :(得分:2)

最终我们手动修改了pom.xml并更改了依赖项的顺序,以便在log4j之前放置rampart - 这解决了类路径顺序问题。

答案 1 :(得分:1)

log4j-over-slf4j是代替slf4j的log4j的替代品。这意味着在类路径中,您的类具有相同的名称和包,但实现方式却截然不同。

由于您在系统中使用log4j,因此可以安全地删除log4j-over-slf4j。在这种情况下,需要log4j-over-slf4j的库实际上将使用原始的log4j。