【发布时间】:2016-12-02 13:14:44
【问题描述】:
我想创建一个 RabbitMQ java 客户端。我创建了一个这样的 Maven 项目:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=rabbitmq-test -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
在我添加的 pom.xml 文件中(如他们的网站所述)
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.0.0</version>
</dependency>
在我写的单个主文件中:
package com.mycompany.app;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws java.util.concurrent.TimeoutException, java.io.IOException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
}
}
在我运行的代码中没有 RabbitMQ 的东西
mvn package
java -cp target/rabbitmq-test-1.0-SNAPSHOT.jar com.mycompany.app.App
并且代码运行良好。 如果我包含导入和 RabitMQ 代码,那么如果我像之前一样运行
Exception in thread "main" java.lang.NoClassDefFoundError: com/rabbitmq/client/ConnectionFactory
at com.mycompany.app.App.main(App.java:17)
这基本上意味着“找不到 RabitMQ jar”对吗?
但是在我第一次运行mvn package 时,maven 在某处下载了 amqp-client-4.0.0.jar。那么如何将这个 jar 也添加到运行中呢?
我尝试自己下载这个 jar,当我这样运行时:
java -cp target/rabbitmq-test-1.0-SNAPSHOT.jar:target/amqp-client-4.0.0.jar:. com.mycompany.app.App
我明白了:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
所以我下载了这个jar,当我这样运行时:
java -cp target/rabbitmq-test-1.0-SNAPSHOT.jar:target/amqp-client-4.0.0.jar:target/slf4j-api-1.7.21.jar:. com.mycompany.app.App
我明白了:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
我加了
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
但还是一样... 所以有什么问题?除了我对java一无所知?
编辑: 在我看到的 RabbitMQ 日志中:
=INFO REPORT==== 2-Dec-2016::15:18:18 ===
accepting AMQP connection <0.1713.0> (127.0.0.1:55976 -> 127.0.0.1:5672)
当我收到 staticLoggerBinder 错误时。那么这是什么意思呢?发生什么事了?
【问题讨论】:
-
当你执行你的主类时,你需要在类路径中拥有你的代码使用的所有 JARs
-
@LutzHorn 是的,但是这里缺少的罐子是什么?
-
包含
org.slf4j.impl.StaticLoggerBinder的那个。见slf4j.org/codes.html#StaticLoggerBinder -
@LutzHorn 这解决了我的问题。谢谢!
-
简单的网络搜索有时会有所帮助。