2017-05-14 44 views
0

衝突我有一個使用Guava作爲依賴一個簡單的構建腳本(短爲清楚起見)新搖籃版本創建了depedency

group 'test' 
version '0.1.0' 

apply plugin: 'java' 
apply plugin: 'application' 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

mainClassName = 'Test' 

repositories {mavenCentral()} 
task wrapper(type: Wrapper) {gradleVersion = '3.5'} 
dependencies {compile 'com.google.guava:guava:21.0'} 

運行此代碼:

public class Test { 
    public static void main(String[] args) { 
     LoadingCache<Long, String> applicantCache = CacheBuilder.newBuilder() 
       .maximumSize(30000) 
       .expireAfterAccess(31, TimeUnit.DAYS) 
       .build(new CacheLoader<Long, String>() { 
        @Override 
        public String load(Long key) { 
         return ""; 
        } 
       }); 
    } 
} 

我得到這個錯誤:

java.lang.NoClassDefFoundError: com/google/common/cache/CacheLoader 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048) 
    at java.lang.Class.getMethod0(Class.java:3018) 
    at java.lang.Class.getMethod(Class.java:1784) 
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) 
Caused by: java.lang.ClassNotFoundException: com.google.common.cache.CacheLoader 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 7 more 
Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" 

當降級Gradle Wrapper版本3.3問題已修復,但是,我需要版本3.5,因爲版本3.3中的其他內容不可行。據我所知,這個版本的GradleGuava之間有一些依賴衝突,但根據this後 - 這是不可能的。

我知道jar到位+使用gradle dependencyInsight --dependency com.google.guava表明存在依賴:

:dependencyInsight 
com.google.guava:guava:21.0 
\--- compile 

感謝所有幫助

編輯: 在其他計算機上的測試之後,它似乎只問題在更新wrapper任務時發生,執行它,然後通過單擊刷新gradle項目刷新所有Gradle項目 bu噸(見附圖)。運行正在執行的分發腳本時,每件事情都可以正常工作 - 所以它只發生在Intellij。我猜我錯過了如何Gradle Wrapper工程或何時執行它的東西...

enter image description here

編輯 測試在搖籃3.4版和問題occurres。

+0

你如何運行你的代碼?我無法用'./gradlew run'重現你的問題。 –

+0

你嘗試過創建一個'胖罐子'嗎? https://www.mkyong.com/gradle/gradle-create-a-jar-file-with-dependencies/ –

+0

@JBNizet我在'Intellij'中通過調試選項 –

回答

0

如果其他人遇到類似的問題,答案是here

Intellij版本(2016.2.5)中的一個錯誤導致compile作用域依賴關係轉化爲provided Intellij的作用域依賴關係。這反過來使依賴性僅出現在Intellij的compile classpath中,但不在runtime classpath中。這就是爲什麼在運行./gradlew run命令時,問題無法複製,因爲在Gradle's部分沒有問題。

升級Intellij版本(2017.1)解決了這個問題。