我正在尝试将Eclipse
项目导出到JAR
可执行文件。
这个项目包括一个带有两个 IBM 包的个人库com.ibm.mq.jar
和com.ibm.mq.jmqi.jar
Eclipse
从运行按钮或命令运行应用程序没有错误:java MainClass
从项目 bin 文件夹。
不幸的是,一旦创建了 jar (File > Export > Runnable Jar) 并启动java -jar MainClass.jar
,结果如下:
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(JarRsrcLoader.java:58)
Caused by: java.lang.NoClassDefFoundError: javax/resource/ResourceException
at com.ibm.mq.MQEnvironment.<clinit>(MQEnvironment.java:520)
at MQtestMain.<init>(MQtestMain.java:38)
at MQtestMain.main(MQtestMain.java:18)
... 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
我也尝试过Fat Jar
用于导出的插件,但结果java -jar MainClass_fat.jar
非常相似:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/resource/ResourceException
at com.ibm.mq.MQEnvironment.<clinit>(MQEnvironment.java:520)
at MQtestMain.<init>(MQtestMain.java:38)
at MQtestMain.main(MQtestMain.java:18)
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 sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more
Eclipse
将项目导出和运行到包含库的Jar
文件的正确方法是什么?IBM MQ Classes for Java
更新 1:不必要但对解决问题非常有用。
Integrating Stuff 建议: Java EE 安装中的
包含javaee.jar
文件以导入项目中包含的 IBM 类 jar 的所有依赖项。
解决方案:尊重所有 IBM 类的 Java 依赖项。
将所有jar
文件从C:\...\IBM\WebSphere MQ\java\lib
导出的可运行 Jar导入自定义库Eclipse
(也不需要 Fat Jar 插件)