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



当我调用java.lang.Class的方法getMethod时,我看到了java.lang.NoClassDefFoundError: org/omg/CORBA/InterfaceDef。我正在尝试使用反射在TMF特定jar的EmsSeeionFactory_I中获得getEmsSession方法。但是当我在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)

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

Caused by: java.lang.NoClassDefFoundError: org/omg/CORBA/UserException

这个问题的出现是因为Java9中不赞成使用java.corba模块(例如org.omg.corba*包)。在Java 11中,该模块不再可用。

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

注意:此选项在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模块java.corpa时,命令如下所示:

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

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

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

最新更新