我正在使用 Gradle 在 Eclipse 中构建我的 Java 项目。 gradle.build如下
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile group: 'com.flowpowered', name: 'flow-nbt', version: '1.0.0'
compile group: 'org.reflections', name: 'reflections', version: '0.9.10'
}
通过 Eclipse 运行时,所有库都可以正常运行。但有时在命令行上工作很有用。在命令行上运行时,即使构建成功且代码包含,也会出现运行时错误 Exception in thread "main"java.lang.NoClassDefFoundError: com/flowpowered/nbt/regionfile/SimpleRegionFileReader
从这些库导入。我尝试过清理和重建,以及 gradlew build --refresh-dependencies ,但我仍然遇到相同的运行时错误。
我会假设这些库从未真正导入过?或者它们没有存储在 java 项目认为它们所在的位置?我对 Gradle 不熟悉,所以欢迎任何建议。
最佳答案
根据发布的 build.gradle
文件,您没有将应用程序打包为可执行 JAR。
首先应用application
插件。但这还不够,因为如果没有其所有依赖项,您将无法将可执行文件作为单个 JAR 运行。也应用 shadow
插件。
这两个插件将使您能够执行以下任务:
run
:从 gradle 的命令行执行应用程序。runShadow
:执行应用程序,但将所有依赖项与已编译的类和资源一起打包在一个 JAR 中。shadowJar
:使用已编译的类和所有依赖项创建一个“fat JAR”。
因此您的 build.gradle
可能如下所示
plugins {
id 'java'
id 'application'
id 'com.github.johnrengelman.shadow' version '1.2.4'
}
mainClassName = 'com.acme.YourMainClassName'
repositories {
mavenCentral()
}
dependencies {
compile group: 'com.flowpowered', name: 'flow-nbt', version: '1.0.0'
compile group: 'org.reflections', name: 'reflections', version: '0.9.10'
}
插件文档:
关于java - 成功的 Gradle 项目构建在运行时会产生 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376191/