java - 成功的 Gradle 项目构建在运行时会产生 NoClassDefFoundError

标签 java gradle

我正在使用 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/

相关文章:

android - 如何找到 gradle 依赖 URL

java - 在 Eclipse 中自定义保存操作?

java - 所有库必须具有确切的版本

java - 学习哪个java web框架?

android - react-native运行Android构建错误-无法解决:com.android.support:appcompat-v7:26.0.2

android - Gradle SourceSets 按 productFlavor 和 buildType

java - 如何在 Java 中创建未压缩的 Zip 存档

java - 具体购物车推荐

android - 在 gradle 中更改 "applicationId"时出错(未找到包名称 "my_new_app_id"的匹配客户端)

java - 无法将“导出”识别为内部或外部命令,