Java 将Rampart添加到POM时出错';s依赖关系

Java 将Rampart添加到POM时出错';s依赖关系,java,classpath,weblogic-10.x,manifest.mf,rampart,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

我们尝试将
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)
log4j-over-slf4j
中有一个构造函数:

protected Logger(String name)
Logger(String name) //Package access only
似乎出于某种原因,
Rampart
触发了错误的类路径顺序,并将
log4j-over-slf4j
放在
log4j
之前

然而,最麻烦的问题是我们无法更改
ear
的清单来更改顺序,因此最终我们通过将
log4j
jar添加到系统类路径中来“解决”它

我的问题分为两部分:

  • Rampart
    问题是否常见,是否有解决方案
  • 这是什么原因呢 更改ear的清单 不会影响类路径吗?(我很高兴 没有你的经验 应用服务器-如此明显 (欢迎回答)

  • 我们使用的是
    weblogic10.3
    ,以及
    rampart1.5.1
    。我们正在使用
    Maven
    编译和构建
    ear
    文件,我今天刚刚了解了一个
    mar
    文件,因此也欢迎任何有关该文件的输入。

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


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

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


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

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

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

    感谢您的澄清-问题是我们无法删除
    log4j-over-slf4j
    ,它来自我们必须使用的第三方。我也遇到了同样的问题,这解决了我的问题。我认为这是正确的解决办法。OP的log4j-over-slf4j可能可以通过pom文件排除。感谢您的澄清-问题是我们无法删除
    log4j-over-slf4j
    ,它来自我们必须使用的第三方。我也遇到了同样的问题,这解决了我的问题。我认为这是正确的解决办法。OP的log4j-over-slf4j可能可以通过pom文件排除。我相信即使您的log4j-over-slf4j来自第三方依赖,您也应该能够通过pom文件排除可传递依赖。我相信即使您的log4j-over-slf4j来自第三方依赖,您应该能够通过pom文件排除可传递依赖项。