簡體   English   中英

使用Guava類時出現NoClassDefFoundError,即使Guava包含在Gradle構建文件和類路徑中

[英]NoClassDefFoundError when using Guava classes even though Guava is included in Gradle build file and on classpath

當我使用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文檔中沒有提及所需的Gradle版本

番石榴是否與較新版本的Gradle不兼容?

這種行為的原因在於您的類路徑。 編譯時的類路徑與運行時的類路徑不同。 您將番石榴傳遞給javac但是在運行時沒有可用的番石榴。

關於類似問題的很好解釋在這里: 運行時使用Gradle的NoClassDefFoundError 我無法在本地重現此問題。 考慮進入gradle緩存並刪除所有內容。

問題最終是我正在使用的Intellij版本(2016.3.1)

一旦我將Intellij更新為2016.3.7,該項目就可以在所有版本的Gradle上正常運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM