java - 使用Guava类时出现NoClassDefFoundError,即使Graava包含在Gradle构建文件和类路径中也是如此

标签 java gradle guava

当我使用Gradle构建依赖于Guava的项目时:

//build.gradle

plugins {
    id 'java'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'com.google.guava', name: 'guava', version: '22.0'
}

task wrapper(type: Wrapper) {
    gradleVersion = '3.3' //Tried 3.1 - 4.0.1 
    distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip"
}

在Intellij中运行项目时,出现以下运行时错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/Multiset

这些库肯定在类路径中,我无法弄清楚为什么会这样。

我已经通过切换到较旧的Gradle版本(3.1、3.2、3.3正常工作)解决了此问题。

因此,我认为问题出在Gradle 3.4+(3.4、3.5.1、4.0和4.0.1)上,我已经尝试了所有这些并收到了NoClassDefFoundError。

Guava documentation中没有提及所需的Gradle版本

Guava 是否与较新版本的Gradle不兼容?

最佳答案

这种行为的原因在于您的类路径。编译时的类路径与运行时的类路径不同。您将 Guava 传递给javac,但是在运行时没有可用的 Guava 。

相当类似的问题的很好解释在这里:NoClassDefFoundError at Runtime with Gradle。我无法在本地重现此问题。考虑进入gradle缓存并删除所有内容。

关于java - 使用Guava类时出现NoClassDefFoundError,即使Graava包含在Gradle构建文件和类路径中也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45287942/

相关文章:

java - 用 Java JNA 编写的 key 监听器。防止多次回调

android - 将 flutter 升级到版本 3 后,我的现有项目未构建

android-studio - 无法应用插件 [id 'com.android.application'] - 支持的最低 Gradle 版本为 4.4

java - 如何将 ListView 项目 ID 传递给 ActionMode.Callback?

java - 如何将 storm mongo 库添加为 Maven 依赖项?

java - LibGDX - 将透视相机表示为四元数

android - 错误:Android Gradle插件仅支持Kotlin Gradle插件1.3.10及更高版本

java - 从 Range<Date> 列表中提取间隙

java - guava-teSTLib future 版本 JAR

java - java android中的ArrayList groupby基于没有java 8流和lambda的相同属性