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

Java加载错误库抛出NoClassDefFoundError:找不到GrammarReaderController

问题分析与解决方案

核心原因

你遇到的问题本质是org-project-execution.jar内部代码未正确引用shaded后的类路径:

  • 虽然该jar已将com.sun.msv.reader.GrammarReaderController重定位到com.ctc.wstx.shaded.msv_core.reader.GrammarReaderController,但jar内的Executor类(或其依赖的其他类)字节码中,仍然硬编码引用了原始包路径com.sun.msv.reader.GrammarReaderController。
  • 编译阶段因你手动导入了shaded类,所以编译通过;但运行时JVM执行Executor.execute方法时,会尝试加载代码中实际引用的原始路径类,而非你导入的shaded类。

次要诱因

  • Shading打包不彻底:使用Maven Shade或类似插件打包时,仅完成了类的移动,未配置relocation规则批量替换所有依赖类中的引用路径,导致代码中的类全限定名未被更新。
  • 类加载冲突:额外添加的msv-core-2022.7-jar-with-dependencies.jar可能与org-project-execution.jar中的shaded类产生路径混淆,但这并非核心问题——即使不加这个jar,你依然会遇到相同错误。

解决步骤

  1. 验证jar内部的引用路径
    用反编译工具(如JD-GUI)打开org-project-execution.jar,找到org.project.execution.Executor类,查看其调用GrammarReaderController的代码,确认引用的是原始路径还是shaded后的路径。如果是前者,说明打包时未更新引用。

  2. 重新配置Shading打包规则
    若使用Maven Shade插件,确保在pom.xml中添加完整的relocation配置,将原始包路径映射到shaded路径,示例配置:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.4.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <relocations>
                        <relocation>
                            <pattern>com.sun.msv</pattern>
                            <shadedPattern>com.ctc.wstx.shaded.msv_core</shadedPattern>
                        </relocation>
                    </relocations>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    该配置会自动修改所有依赖类中对com.sun.msv包下类的引用,替换为shaded后的路径。

  3. 排查类加载日志
    运行Java程序时添加-verbose:class参数,查看类加载的详细日志:

    java -verbose:class -cp "your-classpath" your.main.Class
    

    在日志中搜索com.sun.msv.reader.GrammarReaderController,确认JVM尝试从哪个jar加载该类,以及是否存在加载失败的情况,进一步定位问题。

  4. 移除冗余依赖
    由于org-project-execution.jar已包含shaded后的GrammarReaderController类,无需额外添加msv-core-2022.7-jar-with-dependencies.jar,移除该jar后再测试,避免类路径冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:15:55