【发布时间】:2017-06-25 22:53:55
【问题描述】:
我正在尝试在 Intellij Gradle 项目中使用 Guava,虽然我的代码可以编译,但在运行时我看到了这个 >
java.lang.NoClassDefFoundError: com/google/common/collect/Ordering
我已经阅读了一些帖子,这些帖子表明 Guava 库在运行时不在类路径中。我已经通过使用 System.getProperty("java.class.path") 写出类路径来验证这一点,并且没有 Guava 库。
我已经尝试(正如其他人所建议的那样)将文件夹或 lib 本身添加为具有范围 = compile 的模块依赖项。看图>
Intellij Module Dependencies 这也没有奏效。
这里是项目中使用的库> Project Libs
任何关于这里发生的事情的建议都非常感激。
我的 build.gradle >
group 'EE'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
它不包含对我添加到项目库中的 guava 库的引用:: com.google.guava:guava:18.02
看起来我在某个地方错过了重要的一步。
【问题讨论】:
-
您可能会发现只为您的项目编写一个 POM 并让 intellij 使用它更容易。然后您就不必摆弄任何这些,并且该项目很容易移植到其他 IDE(或没有 IDE)。
-
Gradle 项目中的所有依赖项都必须在
build.gradle文件中定义,您在 IntelliJ IDEA 模块依赖项中所做的任何更改都将在下一次 Gradle 项目刷新时丢弃。请显示您的build.gradle文件的相关部分以及您使用的 Guava 库版本。 -
谢谢。我会尝试,但我真的希望它可以与 Gradle 一起使用。
-
在阅读了另一篇直接修改 build.gradle 的帖子后,我通过添加以下内容解决了这个问题 > compile group: 'com.google.guava', name: 'guava', version: '18.0' to我的 build.gradle。不知道这是否是正确的做法。
-
没错。
compile用于主应用程序的编译/运行时依赖项。testCompile是编译和运行测试所需的依赖项。
标签: intellij-idea guava noclassdeffounderror