java - 奇怪的 log4j 错误

标签 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 无参数构造函数看起来并没有抛出异常。

有人知道这是怎么回事吗?

编辑: 我实际上使用 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

提前致谢!

最佳答案

Log4jAmqBridge 依赖于 JMS API。

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

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

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

关于java - 奇怪的 log4j 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9168256/

相关文章:

java - 文件名在 log4j 中滚动文件

java - Log4j 不在控制台上打印调试日志

java - Swing 容器和 Controller 不遵守应用于它们的设置?

Java 8集合: filter with function don't work

maven:发生了非法的反射访问操作

maven - 使用maven 3.0.5发布快照到nexus

java - maven下载卡在无效路径

java - 如何在仍记录日志的同时向用户显示Java中的任何类型的错误?

Java从命令行执行依赖于其他jar的jar

java - BufferedReader 从套接字读取