我正在尝试让基于 ANT 的旧应用程序在 Tomcat 上运行。当我在 Eclipse 中运行它时,出现以下错误:
Caused by: java.lang.NoClassDefFoundError: org/eclipse/birt/core/exception/BirtException
at java.base/java.lang.Class.getDeclaredFields0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3297)
at java.base/java.lang.Class.getDeclaredFields(Class.java:2371)
at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:110)
at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:269)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationListenerAnnotations(WebAnnotationSet.java:89)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:67)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:329)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:783)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:300)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4804)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.eclipse.birt.core.exception.BirtException
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
... 19 more
BirtException 类在构建路径上的 coreapi.jar 文件中定义。 build.xml 文件中也提到了这一点:
<path id="MDS 3.0 Single Code.classpath">
<path refid="JSF 2 Libraries.userclasspath"/>
<path refid="Oracle Libraries.userclasspath"/>
<path refid="Tomahawk Libraries.userclasspath"/>
<path refid="tomahawk.userclasspath"/>
<path refid="Oracle.userclasspath"/>
<path refid="JSF Libraries.userclasspath"/>
<path refid="EclipseLink.userclasspath"/>
<path refid="Tomcat.userclasspath"/>
<pathelement location="${ECLIPSE_HOME}configuration/org.eclipse.osgi/105/0/.cp/data/2.5.2/engineapi.jar"/>
<pathelement location="Libraries/eclipse_config_libs/coreapi.jar"/>
所以,它似乎应该在运行时可用。我在这里缺少什么? 我正在使用 tomcat 8.5 和 eclipse 4.29
您是否尝试将 Libraries/eclipse_config_libs/coreapi.jar 更改为服务器上的完整路径? java CLASSPATH 上的完整路径吗?你能发布 ant 构建脚本吗?您可以使用以下
URLClassLoader urlClassLoader = URLClassLoader.newInstance(new URL[] {
new URL(
"whatever the path of the jar is"
)
});
Class clazz = urlClassLoader.loadClass("BirtException");
System.out.println(null == clazz); // or call a getter/setter on it.
此外,在 Eclipse 中,您还需要确保该库实际上包含在项目级别和服务器上的 .ear 中。 和BIRT NoClassDefFoundError