如何将包含IBM Java类的Eclipse项目导出到可执行的JAR中

时间:2012-09-01 08:09:48

标签: java eclipse jar websphere noclassdeffounderror

我正在尝试将Eclipse项目导出到JAR可执行文件 该项目包括一个包含两个IBM软件包com.ibm.mq.jarcom.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插件)还)

2 个答案:

答案 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插件)还)

相关问题