我们尝试将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
在两个罐子中定义 - log4j
和log4j-over-slf4j
。
在log4j
中 - 有一个构造函数:
protected Logger(String name)
在log4j-over-slf4j
中有一个构造函数:
Logger(String name) //Package access only
由于某种原因,Rampart
似乎触发了错误的类路径顺序并将log4j-over-slf4j
放在log4j
之前。
然而,最令人不安的问题是我们无法更改我们的ear
清单以更改顺序 - 所以最终我们通过将log4j
jar添加到系统类路径
我的问题分为两部分:
Rampart
问题是否熟悉,是否有解决方案?我们正在使用Weblogic 10.3
和Rampart 1.5.1
。我们正在使用Maven
来编译和构建ear
文件 - 我今天刚刚学习了mar
文件,所以对此的任何输入也会受到欢迎。
答案 0 :(得分:2)
最终我们手动修改了pom.xml
并更改了依赖项的顺序,以便在log4j
之前放置rampart
- 这解决了类路径顺序问题。
答案 1 :(得分:1)
log4j-over-slf4j是代替slf4j的log4j的替代品。这意味着在类路径中,您的类具有相同的名称和包,但实现方式却截然不同。
由于您在系统中使用log4j,因此可以安全地删除log4j-over-slf4j。在这种情况下,需要log4j-over-slf4j的库实际上将使用原始的log4j。