You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用createJeuclidDom时遇NoClassDefFoundError: CustomEvent类缺失

问题描述

我在NetBeans开发平台上使用Maven学习Java的jeuclid-core-3.1.9,所有依赖由NetBeans根据源码中的导入自动生成。尝试将程序中字符串形式的MathML公式生成DOM后创建MathML树,调用createJeuclidDom时遇到NoClassDefFoundError异常,缺失类为org/w3c/dom/events/CustomEvent。项目窗口显示该类属于batik-ext-1.7 jar包的org.w3c.dom.events包,但选中后导航窗口无内容,说明实际不存在。怀疑存在兼容性问题,但无法确定具体原因。

源代码

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 */

package com.mycompany.jeuclidtrial;

import java.io.IOException;
import java.io.StringReader;
import javax.xml.transform.stream.StreamSource;
import net.sourceforge.jeuclid.parser.Parser;
import org.w3c.dom.Document;
import net.sourceforge.jeuclid.DOMBuilder;
import net.sourceforge.jeuclid.elements.generic.DocumentElement;
import net.sourceforge.jeuclid.swing.JMathComponent;
import org.xml.sax.SAXException;

/**
 *
 * @author Tony
 */
public class JeuclidTrial {

    public static void main(String[] args) {
        String formula;
        
        formula = "<?xml version=\"1.0\"?>";
        formula += "<math mode=\"content\" xmlns=\"http://www.w3.org/1998/Math/MathML\">";
        formula += "<apply><power/><apply><plus/><ci>a</ci><ci>b</ci><ci>c</ci></apply><cn>2</cn></apply>";
        formula += "</math>";

        try {
            /**
             * This code adapted from
             * https://jeuclid.sourceforge.net/index.html
             */
            
            StringReader aStreamReader = new StringReader(formula);
            StreamSource aStreamSource = new StreamSource(aStreamReader);
            Parser aParser = Parser.getInstance();
            Document theDocument  = aParser.parseStreamSource(aStreamSource);
            DOMBuilder dBuilder = net.sourceforge.jeuclid.DOMBuilder.getInstance();
            DocumentElement theDocumentElement = dBuilder.createJeuclidDom(theDocument);
            JMathComponent theMathComponent = new JMathComponent();
            theMathComponent.setDocument(theDocumentElement);
        }
        catch (SAXException e) {
            System.out.println(e.getMessage());
            System.exit(0);
        }
        catch (IOException e) {
            System.out.println(e.getMessage());
            System.exit(0);
        }
        
        
        System.out.println("Hello World!");
    }
}

堆栈跟踪

Exception in thread "main" java.lang.NoClassDefFoundError: org/w3c/dom/events/CustomEvent
    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.getField0(Class.java:3482)
    at java.base/java.lang.Class.getField(Class.java:2115)
    at net.sourceforge.jeuclid.elements.JEuclidElementFactory.addClass(JEuclidElementFactory.java:146)
    at net.sourceforge.jeuclid.elements.JEuclidElementFactory.<clinit>(JEuclidElementFactory.java:186)
    at net.sourceforge.jeuclid.elements.generic.DocumentElement.createElementNS(DocumentElement.java:165)
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.startElement(SAX2DOM.java:159)
    at java.xml/com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.closeStartTag(ToXMLSAXHandler.java:206)
    at java.xml/com.sun.org.apache.xml.internal.serializer.ToSAXHandler.flushPending(ToSAXHandler.java:250)
    at java.xml/com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.startElement(ToXMLSAXHandler.java:648)
    at java.xml/com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.startElement(ToXMLSAXHandler.java:510)
    at jdk.translet/die.verwandlung.GregorSamsa.http$colon$$slash$$slash$www$dot$w3$dot$org$slash$1998$slash$Math$slash$MathML$colon$template$dot$34()
    at jdk.translet/die.verwandlung.GregorSamsa.applyTemplates()
    at jdk.translet/die.verwandlung.GregorSamsa.http$colon$$slash$$slash$www$dot$w3$dot$org$slash$1998$slash$Math$slash$MathML$colon$template$dot$206()
    at jdk.translet/die.verwandlung.GregorSamsa.applyTemplates()
    at jdk.translet/die.verwandlung.GregorSamsa.http$colon$$slash$$slash$www$dot$w3$dot$org$slash$1998$slash$Math$slash$MathML$colon$template$dot$0()
    at jdk.translet/die.verwandlung.GregorSamsa.applyTemplates()
    at jdk.translet/die.verwandlung.GregorSamsa.transform()
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:627)
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:782)
    at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:395)
    at net.sourceforge.jeuclid.DOMBuilder.applyTransform(DOMBuilder.java:217)
    at net.sourceforge.jeuclid.DOMBuilder.createJeuclidDom(DOMBuilder.java:202)
    at net.sourceforge.jeuclid.DOMBuilder.createJeuclidDom(DOMBuilder.java:155)
    at net.sourceforge.jeuclid.DOMBuilder.createJeuclidDom(DOMBuilder.java:135)
    at com.mycompany.jeuclidtrial.JeuclidTrial.main(JeuclidTrial.java:42)
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.events.CustomEvent
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 27 more
Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
    at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:1000)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:947)
    at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:471)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:342)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:330)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:175)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:76)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:163)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:160)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:827)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:272)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:195)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)

构建失败日志

BUILD FAILURE
------------------------------------------------------------------------
Total time:  7.466 s
Finished at: 2023-09-05T09:33:22-05:00
------------------------------------------------------------------------
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.1.0:exec (default-cli) on project jeuclidTrial: Command execution failed.: Process exited with an error: 1 (Exit value: 1) -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

解决方案

  • 补充缺失的依赖:batik-ext-1.7确实不包含org.w3c.dom.events.CustomEvent类,需要手动添加包含该类的依赖。在pom.xml中加入以下内容:
<dependency>
    <groupId>xml-apis</groupId>
    <artifactId>xml-apis</artifactId>
    <version>1.4.01</version>
</dependency>
  • 更新batik-ext版本:替换batik-ext-1.7为更高版本(如1.14),新版本包含所需的CustomEvent类,修改pom.xml中的batik-ext依赖版本即可。
  • 重新构建项目:执行mvn clean install命令,确保依赖正确下载并加载到项目中。
  • 检查依赖范围:确认相关依赖的范围是compile或runtime,避免运行时无法访问该类。

内容的提问来源于stack exchange,提问作者Tony Dean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:14:51