Java.lang.NoClassDefFoundError: org/omg/CORBA/InterfaceDef 的翻译是“找不到类定义错误:org/omg/CORBA/InterfaceDef”。

14
我在调用java.lang.ClassgetMethod方法时遇到了java.lang.NoClassDefFoundError: org/omg/CORBA/InterfaceDef的错误。我正在尝试使用反射获取TMF特定jar中EmsSeeionFactory_IgetEmsSession方法。但是当我在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)

1
你的classpath是什么? - tuergeist
您的类加载器可能会混淆。您的类路径上是否有多个相同的JAR文件实例? - Jeff
2个回答

9
在安装或升级自定义应用程序所使用的Java版本后,会生成以下错误:
Caused by: java.lang.NoClassDefFoundError: org/omg/CORBA/UserException

问题的原因是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 

当您包含 --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 

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

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


1
或者添加glassfish-corba-orb Maven依赖项对我有用! - ZhengguanLi

3
NoClassDefFoundError指的是在编译时已找到该类,但在运行时未找到该类。大部分情况下,运行环境中的classpath和编译环境中的classpath有所不同。找出差异并修正后,问题就能得到解决。
如果你已经核对过,确认classpath完全相同,那么问题可能更加棘手。你可以阅读这篇教程来解决这个问题: http://javarevisited.blogspot.be/2011/06/noclassdeffounderror-exception-in.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接