2016-12-02 159 views
2

我想创建一个RabbitMQ java客户端。我创建了一个Maven项目是这样的:运行RabbitMQ java客户端

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=rabbitmq-test -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

里面我加入(如在他们的网站上描述)

<dependency> 
    <groupId>com.rabbitmq</groupId> 
    <artifactId>amqp-client</artifactId> 
    <version>4.0.0</version> 
</dependency> 

和单主文件我写里面的pom.xml文件:

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罐子”对吧? 但在我的第一个mvn package运行时,maven在某处下载了amqp-client-4.0.0.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 

所以,我下载了这个罐子,当我像这样运行:

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错误。那是什么意思?发生了什么事?

+0

您需要在您的代码在类路径使用的所有JAR文件,当你执行你的主类 – 2016-12-03 19:11:51

+0

@LutzHorn是的,但是这里缺少的罐子是什么? –

+0

包含'org.slf4j.impl.StaticLoggerBinder'的那个。见http://www.slf4j.org/codes。html#StaticLoggerBinder – 2016-12-05 07:41:34

回答

0

您需要在POM的maven-assembly-plugin下定义配置“jar-with-dependencies”。因此,当您使用包装目标运行时,maven将在包装内部包含所有必需的罐子。

否则,您必须手动提供所有必需的罐子。

0

您必须添加依赖关系的RabbitMQ在你的pom.xml文件检查下面的依赖代码

<modelVersion>4.0.0</modelVersion> 
    <groupId>com.mmi</groupId> 
    <artifactId>PushNotification</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <properties> 
     <spring.version>4.3.9.RELEASE</spring.version> 
     <log4j.version>1.2.17</log4j.version> 
     <aspectj.version>1.7.4</aspectj.version> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>3.0.1.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.amqp</groupId> 
      <artifactId>spring-amqp</artifactId> 
      <version>1.7.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.amqp</groupId> 
      <artifactId>spring-rabbit</artifactId> 
      <version>1.7.2.RELEASE</version> 
     </dependency> 
    </dependencies>