我正在尝试将Eclipse
项目导出到JAR
可执行文件
该项目包括一个包含两个IBM软件包com.ibm.mq.jar
和com.ibm.mq.jmqi.jar
从Eclipse
运行按钮或命令:java MainClass
从项目bin文件夹运行应用程序时没有错误。
不幸的是,一旦创建了jar(文件>导出> 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:不必要但非常有用,无法达到解决方案。
通过集成Stuff建议:
包含Java EE安装中的javaee.jar
文件,以导入项目中包含的IBM类jar的所有依赖项。
解决方案:尊重所有IBM类的Java依赖关系。
从jar
导入自定义库所有 C:\...\IBM\WebSphere MQ\java\lib
文件。从Eclipse
导出为runnable Jar(不需要Fat Jar插件)还)
答案 0 :(得分:2)
javax.resource.ResourceException是Java EE api的一部分。
您的Eclipse项目可能假设此jar将在目标环境中可用/在其jar包列表中没有java-ee api以与应用程序打包。
您使用的是哪种构建工具? Maven或Ant,或者您是否在Eclipse中打包,而不使用外部工具?
要解决此问题,您需要确保Java EE api jar包含在您的可执行jar中。
答案 1 :(得分:0)
解决方案:尊重所有IBM类的Java依赖关系。
我发现非常有用的 Integrating Stuff 建议在Java EE安装中包含javaee.jar
文件,以导入包含在项目中的IBM类jar的所有依赖项。
这并没有解决他的错误,而是让我找到了解决方案:
从jar
导入自定义库所有 C:\...\IBM\WebSphere MQ\java\lib
文件。从Eclipse
导出为runnable Jar(不需要Fat Jar插件)还)