0

我正在尝试将Eclipse项目导出到JAR可执行文件。
这个项目包括一个带有两个 IBM 包的个人库com.ibm.mq.jarcom.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 插件)

4

2 回答 2

2

javax.resource.ResourceException 是 Java EE api 的一部分。

您的 Eclipse 项目可能假定此 jar 将在目标环境中可用/在其与应用程序一起打包的 jar 列表中没有 java-ee api。

您使用的是哪种构建工具?Maven 或 Ant,或者您是在 Eclipse 本身中打包,而不使用外部工具?

要解决此问题,您需要确保 Java EE api jar 包含在您的可执行 jar 中。

于 2012-09-01T08:23:27.230 回答
0

解决方案:尊重所有 IBM 类的 Java 依赖项。

我发现非常有用的Integrating Stuff建议javaee.jar从 Java EE 安装中包含文件以导入项目中包含的 IBM 类 jar 的所有依赖项。
这并不能解决他的错误,但让我找到了解决方案:

所有jar文件从C:\...\IBM\WebSphere MQ\java\lib
导出的可运行 Jar导入自定义库Eclipse(也不需要 Fat Jar 插件)

于 2012-09-03T06:06:06.813 回答