使用MQ的Java类运行简单jar时出错

时间:2012-08-30 15:07:11

标签: java windows eclipse jar ibm-mq

我是Websphere MQ classes for Java编程的初学者 我决定按照这种方式编写一个能够通过TCP / IP连接和读取队列消息的小应用程序。

遵循本指南:http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=%2Fcom.ibm.mq.csqzaw.doc%2Fja10410_.htm

在第4点,建议使用以下命令在Windows命令提示符下测试Websphere Client安装(版本:7.0.1.8):
java -Djava.library.path=library_path MQIVP
对我来说'library_path'是“C:\ Program Files \ IBM \ WebSphere MQ \ java \ lib”

应用程序运行,我已经开始用Eclipse IDE编写一个简单的程序代码:

import com.ibm.mq.MQEnvironment;

public class MQtestMain {

    public static void main(String[] args) {

        System.out.println("main");

        new MQtestMain();
    }

    public MQtestMain(){

        System.out.println("MQtestMain");

        MQEnvironment.hostname = "my.host.name";
        MQEnvironment.channel = "my.channel";
        MQEnvironment.port = 1414;

    }

}

它无关,但它只是一个测试,以确保一切都正确设置。

我已经在“C:\ Program Files \ IBM \ WebSphere MQ \ java \ lib”中设置了一个包含'com.ibm.mq.jar'和'com.ibm.mq.jmqi.jar'的自定义库,编译时没有报告错误。

Eclipse运行应用程序,它正确地在控制台上打印出“main”和“MQtestMain”。

因此我继续导出它:文件>出口> Runnable Jar
将“库处理”设置为“将所需库打包为生成的JAR”

不幸的是,如果我从Windows命令提示符运行该程序:java -jar MQtest.jar 结果如下:

main
MQtestMain
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: java.lang.NoClassDefFoundError: javax/resource/ResourceException
        at com.ibm.mq.MQEnvironment.<clinit>(MQEnvironment.java:576)
        at MQtestMain.<init>(MQtestMain.java:21)
        at MQtestMain.main(MQtestMain.java:14)
        ... 5 more
Caused by: java.lang.ClassNotFoundException: javax.resource.ResourceException
        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 java.lang.ClassLoader.loadClass(Unknown Source)
        ... 8 more

第一行和第二行是正确的,但我真的不明白以下错误


更新

我试着给你更多信息:
正如我所说,从主class文件运行应用程序没有问题,而从jar文件执行它似乎无法找到IBM库。
我在eclipse中创建了一个名为“MQ classes for Java”的个人库,其中包含了此应用程序使用的两个jar包。
这里是项目.classpath文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
    <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/MQ classes for Java"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

有没有办法将正确的库链接到可运行的jar,以便从安装了WMQ Client的每台机器上启动它?


解决方案:

由于找不到某些依赖项,错误已经解决,包括所有 IBM classes for Java jar个文件到WMQ Client文件夹安装程序(“C: \ Program Files \ IBM \ WebSphere MQ \ java \ lib“)

3 个答案:

答案 0 :(得分:3)

您需要像使用MQIVP测试一样使用java.library.path,或者将CLASSPATH设置为包含MQ JAR文件。

答案 1 :(得分:3)

<强>解决方案:

这些错误是由于未找到某些依赖性造成的;
它们可以解决,包括所有 IBM classes for Java jar文件到WMQ Client文件夹安装(“C:\ Program Files \ IBM \ WebSphere MQ \ java \ lib” “)

答案 2 :(得分:3)

我只是通过添加javax依赖来解决这个问题:

<dependency>
    <groupId>javax.resource</groupId>
    <artifactId>connector-api</artifactId>
    <version>1.5</version>
</dependency>