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.Loggerlog4jと の 2 つの jarで定義されていますlog4j-over-slf4j。にはlog4j- コンストラクターがあります。

protected Logger(String name)

コンストラクタlog4j-over-slf4jがあります:

Logger(String name) //Package access only

何らかの理由でRampart不適切なクラスパスの順序がトリガーされ、 のlog4j-over-slf4j前に配置されたようlog4jです。

ただし、最も厄介な問題は、 のマニフェストを変更して順序を変更できなかったことです。そのため、最終的にjar をシステム クラスパスearに追加することで「解決」しました。log4j

私の質問には2つの部分があります:

  1. 問題はRampartよく知られており、解決策はありますか?
  2. ear のマニフェストを変更してもクラスパスに影響しない理由は何でしょうか? (私はアプリケーションサーバーの経験があまりないので、明白な答えは大歓迎です)

Weblogic 10.3、およびを使用していRampart 1.5.1ます。Mavenファイルのコンパイルとビルドにを使用しています。ear今日、あるファイルについて知ったmarので、それに関する情報も歓迎します。

4

2 に答える 2

2

最終的に、pom.xml手動で変更し、依存関係の順序をlog4j前に変更しましたrampart。これにより、クラスパスの順序の問題が解決されました。

于 2011-06-02T12:04:25.907 に答える
2

log4j-over-slf4j は、slf4j にプロキシする log4j の置き換えです。これは、クラスパスに同じ名前とパッケージのクラスがあることを意味しますが、実装は大きく異なります。

システムで log4j を使用しているため、log4j-over-slf4j を削除しても安全です。その場合、log4j-over-slf4j を必要とするライブラリは実際には元の log4j を使用します。

于 2011-06-01T17:00:31.517 に答える