Java 客户端连接到HornetQ时ClassNotFoundException

Java 客户端连接到HornetQ时ClassNotFoundException,java,maven,jboss,jms,hornetq,Java,Maven,Jboss,Jms,Hornetq,我试图构建一个简单的JAR,将消息发布到HornetQ中的队列,并从Eclipse运行JAR。我得到以下错误。我猜它与汇编版本有关,但我不确定如何追踪它 javax.naming.NamingException: Failed to lookup [Root exception is java.io.IOException: java.lang.ClassNotFoundException: org.hornetq.core.client.impl.AfterConnectInternalLis

我试图构建一个简单的JAR,将消息发布到HornetQ中的队列,并从Eclipse运行JAR。我得到以下错误。我猜它与汇编版本有关,但我不确定如何追踪它

javax.naming.NamingException: Failed to lookup [Root exception is java.io.IOException: java.lang.ClassNotFoundException: org.hornetq.core.client.impl.AfterConnectInternalListener]
    at org.jboss.naming.remote.client.ClientUtil.namingException(ClientUtil.java:36)
    at org.jboss.naming.remote.protocol.v1.Protocol$1.execute(Protocol.java:101)
    at org.jboss.naming.remote.protocol.v1.RemoteNamingStoreV1.lookup(RemoteNamingStoreV1.java:76)
    at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:77)
    at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:81)
    at javax.naming.InitialContext.lookup(Unknown Source)
    at com.me.joel.MessageCreator.createMessage(MessageCreator.java:20)
    at com.me.joel.MessageProducerJar.main(MessageProducerJar.java:9)
Caused by: java.io.IOException: java.lang.ClassNotFoundException: org.hornetq.core.client.impl.AfterConnectInternalListener
    at org.jboss.naming.remote.protocol.v1.Protocol$1$3.read(Protocol.java:156)
    at org.jboss.naming.remote.protocol.v1.BaseProtocolCommand.readResult(BaseProtocolCommand.java:60)
    at org.jboss.naming.remote.protocol.v1.Protocol$1.handleClientMessage(Protocol.java:146)
    at org.jboss.naming.remote.protocol.v1.RemoteNamingStoreV1$MessageReceiver$1.run(RemoteNamingStoreV1.java:184)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.hornetq.core.client.impl.AfterConnectInternalListener
    at java.net.URLClassLoader$1.run(Unknown Source)
    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)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.jboss.marshalling.AbstractClassResolver.loadClass(AbstractClassResolver.java:135)
    at org.jboss.marshalling.AbstractClassResolver.resolveClass(AbstractClassResolver.java:116)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadClassDescriptor(RiverUnmarshaller.java:870)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadClassDescriptor(RiverUnmarshaller.java:902)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1204)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:272)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
    at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1677)
    at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1593)
    at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1557)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1235)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:272)
    at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
    at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:37)
    at org.jboss.naming.remote.protocol.v1.Protocol$1$3.read(Protocol.java:153)
    ... 6 more
这是我的代码:

public void createMessage() throws Exception{
        String destinationName = "queue/test";

        Context ic = null;
        ConnectionFactory cf = null;
        Connection connection =  null;

        try {         
            ic = getInitialContext();

            cf = (ConnectionFactory)ic.lookup("jms/RemoteConnectionFactory");
            //Topic topic = (Topic)ic.lookup(destinationName);
            Queue objQueue = (Queue)ic.lookup(destinationName);

            connection = cf.createConnection();
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageProducer publisher = session.createProducer(objQueue);
            //MessageConsumer subscriber = session.createConsumer(topic);

            //subscriber.setMessageListener(this);
            connection.start();

            TextMessage message = session.createTextMessage("Hello!");
            publisher.send(message);

            //Scanner keyIn = new Scanner(System.in);

            //System.out.print("JMS Server listening. Type a Key + CR to exit\n");
            //keyIn.next();

        }
        finally
        {   
            if(ic != null)
            {
                try
                {
                    ic.close();
                }
                catch(Exception e)  {
                    throw e;
                }
            }

            closeConnection(connection);
        }
    }

    public static Context getInitialContext( ) throws javax.naming.NamingException {

        Properties p = new Properties( );
        p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
        //p.put(Context.URL_PKG_PREFIXES," org.jboss.naming:org.jnp.interfaces");
        p.put(Context.PROVIDER_URL, "remote://localhost:4447");
        p.put(Context.SECURITY_PRINCIPAL, "user");
        p.put(Context.SECURITY_CREDENTIALS, "password");
        return new javax.naming.InitialContext(p);
        //return new javax.naming.InitialContext();
    }  
还有我的POM依赖项

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
   <!--  <dependency>  
       <groupId>org.hornetq</groupId>  
       <artifactId>hornetq-core</artifactId>  
       <version>2.2.6.Final</version>  
       <scope>provided</scope>  
    </dependency>   -->
    <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-core-client</artifactId>
        <version>2.2.6.Final</version>
        <scope>provided</scope>
    </dependency>
    <!-- <dependency>  
       <groupId>org.hornetq</groupId>  
       <artifactId>hornetq-jms</artifactId>  
       <version>2.2.18.Final</version>  
       <scope>provided</scope>  
    </dependency> -->  
    <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-jms-client</artifactId>
        <version>2.2.18.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-jms-client</artifactId>
        <version>2.2.6.Final</version>
        <scope>provided</scope>
    </dependency>
    <!-- <dependency>  
       <groupId>org.hornetq</groupId>  
       <artifactId>hornetq-logging</artifactId>  
       <version>2.2.6.Final</version>  
       <scope>provided</scope>  
    </dependency>  --> 
    <dependency>
        <groupId>org.hornetq.rest</groupId>
        <artifactId>hornetq-rest</artifactId>
        <version>2.2.2.Final</version>
    </dependency>
    <!-- <dependency>  
       <groupId>org.hornetq</groupId>  
       <artifactId>hornetq-transports</artifactId>  
       <version>2.1.0</version>  
       <scope>compile</scope>  
    </dependency>   -->
<!--    <dependency>  
       <groupId>org.jboss.netty</groupId>  
       <artifactId>netty</artifactId>  
       <version>3.1.0.GA</version>  
    </dependency>   -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
        <exclusions>
            <exclusion>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jdmk</groupId>
                <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jmx</groupId>
                <artifactId>jmxri</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>  
       <groupId>org.jboss.javaee</groupId>  
       <artifactId>jboss-jms-api</artifactId>  
       <version>1.1.0.GA</version>  
       <scope>compile</scope>  
    </dependency>  

    <dependency>
        <groupId>org.jboss.as</groupId>
        <artifactId>jboss-as-ejb-client-bom</artifactId>
        <version>7.1.0.Final</version>
        <type>pom</type>
        <scope>compile</scope>
    </dependency>
    <!-- 
  <dependency>  
     <groupId>org.hornetq</groupId>  
     <artifactId>hornetq-core</artifactId>  
     <version>2.0.0.GA</version>  
     <scope>compile</scope>  
  </dependency> 
    <dependency>  
   <groupId>org.hornetq</groupId>  
   <artifactId>hornetq-core-client</artifactId>  
   <version>2.0.0.GA</version>  
   <scope>compile</scope>  
</dependency>  
  <dependency>  
     <groupId>org.hornetq</groupId>  
     <artifactId>hornetq-jms</artifactId>  
     <version>2.0.0.GA</version>  
     <scope>compile</scope>  
  </dependency>  
<dependency>  
   <groupId>org.hornetq</groupId>  
   <artifactId>hornetq-jms-client</artifactId>  
   <version>2.0.0.GA</version>  
   <scope>compile</scope>  
</dependency>  
<dependency>  
   <groupId>org.hornetq</groupId>  
   <artifactId>hornetq-transports</artifactId>  
   <version>2.0.0.GA</version>  
   <scope>compile</scope>  
</dependency>  
<dependency>  
   <groupId>org.jboss.netty</groupId>  
   <artifactId>netty</artifactId>  
   <version>3.1.0.GA</version>  
</dependency>   -->
<dependency>  
   <groupId>org.jboss.javaee</groupId>  
   <artifactId>jboss-jms-api</artifactId>  
   <version>1.1.0.GA</version>  
   <scope>compile</scope>  
</dependency>  
  </dependencies>

朱尼特
朱尼特
3.8.1
测试
org.hornetq
大黄蜂核心客户
2.2.6.最终版本
假如
org.hornetq
hornetqjms客户端
2.2.18.最终版本
org.hornetq
hornetqjms客户端
2.2.6.最终版本
假如
org.hornetq.rest
大黄蜂休息
2.2.2.最终版本
log4j
log4j
1.2.16
javax.mail
邮件
javax.jms
jms
com.sun.jdmk
jmxtools
com.sun.jmx
jmxri
org.jboss.javaee
JBossJMS api
1.1.0.GA
编撰
org.jboss.as
jboss作为ejb客户端bom
7.1.0.最终版本
聚甲醛
编译
org.jboss.javaee
JBossJMS api
1.1.0.GA
编撰

您刚才提到提供了hornetq core客户端库:

<dependency>
    <groupId>org.hornetq</groupId>
    <artifactId>hornetq-core-client</artifactId>
    <version>2.2.6.Final</version>
    <scope>provided</scope>
</dependency>

org.hornetq
大黄蜂核心客户
2.2.6.最终版本
假如

显然不是这样,因此在org.hornetq.core.client.impl.AfterConnectionInternalListener上会出现ClassNotFoundException。

发布的范围是从另一个应用程序复制的,该应用程序正在工作。FWIW,该应用程序是作为WAR构建的,但它有各种各样的类和主要方法,我可以通过Eclipse进行测试。我刚刚尝试将hornetq core客户端以及hornetq core客户端和hornetq jms客户端更改为“编译”,每次都得到相同的结果。请解释您的测试是如何运行的。我指的是如何在eclipse中运行测试。因为我认为jboss提供了hornetq,我假设另一个应用程序在jboss上运行,但是你没有在jboss上测试你的代码。当我在该类的源文件中时,工具栏上有一个绿色的“播放”类型按钮,下面有“运行方式”>“Java应用程序”选项。这导致了上述例外情况。在我提到的WAR文件中,WAR本身打算部署到JBOSS,是的。然而,src/test/java中也有一组类。这些类中的每一个都有一个main方法,因此如果我打开源文件,我会得到相同的绿色“play”按钮,并且我可以将测试类作为Java应用程序运行。更多…WAR是我继承的一个项目,所以我试图把东西剥离出来,了解各个部分。除非有足够的关于它们运行环境的信息,否则无法说明继承项目中的主要方法是如何工作的。最接近的猜测是您的运行环境没有lib。我会删除这个范围,看看它是否会被解决。