我是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 点,建议Websphere Client
在 windows 命令提示符下测试安装(版本:7.0.1.8),使用:
java -Djava.library.path=library_path MQIVP
where 'library_path' for me is "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”。
因此,我已着手将其导出:文件 > 导出 > 可运行 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 客户端的每台机器上启动它?
解决方案:
由于未找到某些依赖项,错误已得到解决,包括将所有IBM classes for Java
jar
文件放入WMQ Client
文件夹安装(“C:\Program Files\IBM\WebSphere MQ\java\lib”)