[英]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.