2017-05-14 46 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)解决了这个问题。