出现 NoClassDefFoundError
通常意味着在运行时找不到特定的类。在你的情况下,它表示 javax.xml.transform.Error
类未找到。
看起来你的问题是在打包成可执行JAR文件后,无法找到 javax.xml.transform.Error
类。这个类应该是包含在 javax.xml.transform.jar
这个JAR文件中。
你的Gradle配置文件显示你正在使用 dependencies
来引入 javax.xml.transform.jar
,这应该没错。我注意到你使用的是 implementation
,这应该会把依赖的JAR文件打包到你的应用中。
一个可能的原因是,你在IDEA中运行代码时,IDEA会自动把项目依赖的JAR文件添加到运行时的classpath中,但在你通过命令行运行JAR文件时,这个自动添加的过程并没有发生。因此,你需要确保在命令行运行时,也要把依赖的JAR文件添加到classpath中。
你可以试试以下的命令来运行你的JAR文件:
java -cp path/to/your/jar:path/to/your/dependency.jar YourMainClass
在这个命令中,-cp
参数后面跟着的是classpath,多个路径之间用冒号(:
)分隔。你需要把 path/to/your/jar
和 path/to/your/dependency.jar
替换成你的JAR文件和依赖的JAR文件的实际路径,同时把 YourMainClass
替换成你的主类名。
另外,你也可以在你的Gradle脚本中添加一个 bootJar
任务来自动创建包含所有依赖的“最终”JAR文件:
bootJar {
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}
这个任务会把所有运行时的依赖都包含在生成的JAR文件中,这样你就可以直接通过 java -jar your-app.jar
来运行你的应用了。
切换到JDK1.8版本就可以,一开始的用JDK20,应该是在高版本的JDK中java.xml.transform包已经不支持了。