java.lang.NoClassDefFoundError:org/omg/CORBA/InterfaceDef

sak*_*dar 8 java reflection corba noclassdeffounderror

我看到java.lang.NoClassDefFoundError: org/omg/CORBA/InterfaceDef,当我调用该方法getMethodjava.lang.Class.我想获得的getEmsSession方法EmsSeeionFactory_I使用反射TMF具体的罐子.但是当我检查了类中的类时jacorb.jar, org/omg/CORBA/InterfaceDef.class可以在类路径上找到它.我在其他论坛上看到过,我也没有在这些论坛中找到相同问题的答案.看起来这个异常是从本机VM代码抛出的.我现在不知道了.有任何想法吗 ?完整的堆栈跟踪如下

java.lang.NoClassDefFoundError: org/omg/CORBA/InterfaceDef
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
        at java.lang.Class.getMethod0(Class.java:2670)
        at java.lang.Class.getMethod0(Class.java:2688)
        at java.lang.Class.getMethod(Class.java:1603)
Run Code Online (Sandbox Code Playgroud)

coz*_*coz 9

安装或升级自定义应用程序使用的 Java 版本后,会生成以下错误:

Caused by: java.lang.NoClassDefFoundError: org/omg/CORBA/UserException
Run Code Online (Sandbox Code Playgroud)

出现此问题的原因是 Java 9 中已弃用 java.corba 模块(例如 org.omg.CORBA* 包)。在 Java 11 中,该模块不再可用。

默认情况下,弃用模块意味着模块中的类在类路径中不可用。但是,您可以通过在 javac 或 java 命令行上包含 --add-module java.corba 选项将它们添加到类路径中。

注意:此选项在 Java 9 和 Java 10 中可用。CORBA 模块在 Java 11 中不可用。但是,可以使用一种解决方法来为 Java 11 添加这些模块。请参阅以下 Java 9 和 10 的示例,以及 Java 11 的解决方法。

Java 9 和 10 的示例:

在Java 9和10中,您需要更改此命令:

jdk-9.0.4/bin/java -classpath "log4j.jar;sas.core.jar;sas.security.sspi.jar;sas.svc.connection.jar" javaclass 
Run Code Online (Sandbox Code Playgroud)

当您包含 --add-module java.corba 时,命令如下所示:

jdk-9.0.4/bin/java --add-modules=java.corba -classpath "log4j.jar;sas.core.jar;sas.security.sspi.jar;sas.svc.connection.jar" javaclass 
Run Code Online (Sandbox Code Playgroud)

Java 11 的解决方法:

要将 CORBA 模块添加到 Java 11,您必须从在线资源外部下载 GlassFish CORBA JAR 文件,并将它们添加到 Java 11 的类路径中。以下列表显示了您需要的五个 GlassFish JAR 文件:

glassfish-corba-internal-api.jar
glassfish-corba-omgapi.jar
glassfish-corba-orb.jar
pfl-basic.jar
pfl-tf.jar
Run Code Online (Sandbox Code Playgroud)

http://support.sas.com/kb/63/716.html

  • 或者添加 glassfish-corba-orb Maven 依赖项对我有用! (2认同)

小智 3

NoClassDefFoundError 表示该类在编译时找到,但在运行时未找到。大多数时候,运行时环境的类路径和编译环境的类路径之间存在差异。当你找到差异并修复它后,它就会起作用。

如果您已检查并且 100% 确定类路径相同,那么错误会更加棘手,您可以阅读本教程来解决问题: http ://javarevisited.blogspot.be/2011/06/noclassdeffounderror-异常-in.html