奇怪的log4j错误

时间:2012-02-06 22:24:19

标签: java maven log4j jms

尝试使用log4j的内置JMSAppender将消息记录到本地消息队列(ActiveMQ)。

我设置了一个具有条目Driver方法的测试main,并且只是实例化我想要建立连接的实际类:

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 no-arg构造函数引发异常。

有人知道最近发生了什么吗?

修改: 我实际上是使用Maven来管理我的依赖项,并在我的pom中包含了以下依赖声明:

<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>

在我的项目中将以下jar放在Maven依赖项下(它们也被添加到Eclipse工作台类路径中):

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

Log4jAmqBridge依赖于JMS API。

将此依赖项添加到您的pom.xml:

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

它应该可以解决你的问题。