0

我们尝试添加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在两个 jar 中定义 -log4jlog4j-over-slf4j. 在log4j- 有一个构造函数:

protected Logger(String name)

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

Logger(String name) //Package access only

似乎由于某种原因Rampart触发了错误的类路径顺序并放置log4j-over-slf4jlog4j.

然而,最麻烦的问题是我们无法改变我们ear的清单来改变顺序——所以最终我们通过将log4jjar 添加到系统类路径来“解决”它

我的问题有两个部分:

  1. 问题是否Rampart熟悉,是否有解决方案?
  2. 改变耳朵的清单不会影响类路径的原因是什么?(我对应用程序服务器没有那么丰富的经验 - 欢迎提供明显的答案)

我们正在使用Weblogic 10.3Rampart 1.5.1。我们正在使用Maven来编译和构建ear文件——我今天刚刚了解了一个mar文件,所以任何关于它的输入也将受到欢迎。

4

2 回答 2

2

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

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

于 2011-06-01T17:00:31.517 回答
2

最终我们pom.xml手动修改了依赖的顺序,将依赖的顺序改为放在log4j前面rampart——这解决了类路径顺序问题。

于 2011-06-02T12:04:25.907 回答