Странная ошибка log4j - PullRequest
       12

Странная ошибка log4j

0 голосов
/ 07 февраля 2012

Попытка использовать встроенный в JMSAppender log4j для записи сообщений в локальную очередь сообщений (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 Dependencies в моем проекте (которые также добавляются в путь к классу рабочей среды Eclipse):

  • SLF4J-апи-1.6.4
  • SLF4J-log4j12-1.6.4
  • log4j-1.2.16

Заранее спасибо!

1 Ответ

1 голос
/ 07 февраля 2012

Log4jAmqBridge зависит от JMS API.

Добавьте эту зависимость в ваш pom.xml:

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

Это должно решить вашу проблему.

...