2012-02-06 25 views
0

log4jの組み込みJMSAppenderを使用してローカルメッセージキュー(ActiveMQ)にメッセージを記録しようとしています。奇妙なlog4jエラー

は、私がテストエントリmain方法を持っているDriverを設定し、それはちょうど私が接続したい実際のクラスインスタンス化します。

Driver.java

public static void main(String[] args) { 
    Log4jAmqBridge bridge = new Log4jAmqBridge(); 
    bridge.run(); 
} 

Log4jAmqBridge.java

public void run() { 
    // ... 
} 

runメソッドが完全に空の場合(指示なし)、 Driverを実行すると、空のコンソール(Eclipse)が表示されます。しかし、私はrun()に次のコンストラクタを追加秒:

JMSAppender appender = new JMSAppender(); 

私は次のエラーを取得:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/jms/JMSException 
    at test.jmsappender.Log4jAmqBridge.run(Log4jAmqBridge.java:11) 
    at test.Driver.main(Driver.java:11) 
Caused by: java.lang.ClassNotFoundException: javax.jms.JMSException 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 2 more 

私はjavadocをチェックしJMSAppender引数なしのコンストラクタがスローされますようにそれが見えません例外。

何が起こっているのか分かりませんか?

編集:私は実際に私の依存関係を管理するために、Mavenを使用していますし、私のポンポンで、次の依存関係の宣言が含まれている :

<dependency> 
    <scope>compile</scope> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.6.4</version> 
</dependency> 
<dependency> 
    <scope>compile</scope> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.6.4</version> 
</dependency> 

私のプロジェクトにMavenの依存関係の下で、次のjarファイルを置きます(どのまた)Eclipseワークベンチのクラスパスに追加される:

  • SLF4J-API-1.6.4
  • SLF4J-log4j12-1.6.4
  • log4j-1.2.16

ありがとうございます!

+0

競合するジャーのクラスパスを確認してください – zmf

+1

あなたはそのクラスまたはそれに依存するものがありません。何を展開していますか?何に展開していますか? JMSには何を使用していますか? –

+0

Mavenと依存関係について私の編集を参照してください... – IAmYourFaja

答えて

1

Log4jAmqBridgeは、JMS APIに依存します。

は、あなたのpom.xmlにこの依存関係を追加します。

<dependency> 
    <groupId>javax.jms</groupId> 
    <artifactId>jms</artifactId> 
    <version>1.1</version> 
    <scope>provided</scope> 
</dependency> 

それはあなたの問題を解決する必要があります。

+0

ありがとうございますnico_ekito、私はそれを私の ''要素に入れると、私は次のエラーを受け取ります: 'Missing artifact javax。jms:jar:jar:1.1'となります。このエラーは、Eclipseで強調表示されたエラーとして表示されます。とにかくコードを実行しようとすると、同じエラーが発生します... – IAmYourFaja

+0

また、好奇心の念から、 'java。*'や 'javax。* 'で始まるパッケージはJDKに付属しているという印象を受けました/ JRE。どうして私は明らかにJavaコンポーネントであるため、この依存関係を宣言する必要がありますか(それがうまくいけば)。 – IAmYourFaja

+0

これはJEE依存性であり、JSE(標準JDK)にはありません。 JMSのためにこの依存性を試してみてください: org.apache.geronimo.specs のgeronimo-jms_1.1_spec 1.1.1