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

标签 java eclipse jar websphere noclassdeffounderror

我正在尝试导出 Eclipse项目到 JAR可执行文件。
该项目包括一个带有两个 IBM 包的个人库 com.ibm.mq.jarcom.ibm.mq.jmqi.jar

Eclipse运行应用程序没有错误运行按钮或通过命令:java MainClass来自项目 bin 文件夹。

不幸的是,一旦创建了 jar(文件 > 导出 > 可运行 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:不必要,但对于找到解决方案非常有用。

通过整合内容建议:
包括javaee.jar从 Java EE 安装中获取文件以导入项目中包含的 IBM 类 jar 的所有依赖项。

<小时/>

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

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

最佳答案

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

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

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

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

关于java - 如何将包含 Java 库的 IBM 类的 Eclipse 项目导出到可执行 JAR 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226085/

相关文章:

java - spring boot json错误媒体类型和spring security

eclipse - 是否可以在我的应用程序中使用 Eclipse Editor

java - GWT 项目在开发模式下正确读取属性文件,但在部署时找不到它

java - Eclipse 无法识别 Android 设备

java - 图像未显示在 JAR 中

Java 9 : how to add further jar files to classpath dynamically

java - 为什么审计返回空版本

java - BouncyCaSTLe GCM/CCM ArrayIndexOutOfBoundsException 异常

Java 十六进制、字符、数字之间的转换

jar - 如何使用Android Studio生成jar库(Gradle)