【问题标题】:Intellij not including gradle dependency on classpath when running an appIntellij 在运行应用程序时不包括对类路径的 gradle 依赖
【发布时间】:2018-01-07 05:33:30
【问题描述】:

在从 IDE 运行应用程序时,IntelliJ 不包括 logback-classic 对类路径的依赖(它是 kotlin 应用程序,但没关系)。我的 gradle build 包含一行:

    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.+'

在 IntelliJ 的“外部库”下正确列出了依赖项。

当我尝试手动引用依赖项在源代码中提供的类时,编译器不会报错,它会成功编译代码。 但是,当我运行应用程序时,我得到 ClassNotFoundException。

//This import is provided by logback-classic library 
import org.slf4j.impl.StaticLoggerBinder
...
// This compiles successfully, but will trigger ClassNotFoundException when run 
val singleton = StaticLoggerBinder.getSingleton()

我包含了列出运行时类路径的代码:

        val cl = ClassLoader.getSystemClassLoader()
        val urls = (cl as URLClassLoader).urLs
        for (url in urls) {
            System.out.println(url.file)
        }

当从 IDE 运行时,输出不包括 logback-classic。示例输出:

...
/Users/knesek/.gradle/caches/modules-2/files-2.1/commons-httpclient/commons-httpclient/3.1/964cd74171f427720480efdec40a7c7f6e58426a/commons-httpclient-3.1.jar
/Users/knesek/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.8.8/bf88c7b27e95cbadce4e7c316a56c3efffda8026/jackson-databind-2.8.8.jar
/Users/knesek/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.module/jackson-module-jaxb-annotations/2.8.8/e2e95efc46d45be4b429b704efbb1d4b89721d3a/jackson-module-jaxb-annotations-2.8.8.jar
/Users/knesek/.gradle/caches/modules-2/files-2.1/com.sun.mail/javax.mail/1.5.6/ab5daef2f881c42c8e280cbe918ec4d7fdfd7efe/javax.mail-1.5.6.jar
/Users/knesek/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-core/1.1.11/88b8df40340eed549fb07e2613879bf6b006704d/logback-core-1.1.11.jar
/Users/knesek/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.1.1/98e484e67f913e934559f7f55f0c94be5593f03c/kotlin-stdlib-1.1.1.jar
/Users/knesek/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/4.3.9.RELEASE/daa5abf3779c8cad1a2910e1ea08e4272489d8ae/spring-beans-4.3.9.RELEASE.jar
...

令人着迷的是,logback-core 存在,而 logback-classic 不存在(并且 logback-core 是 logback-classic 的传递依赖项)。

我尝试使 InteliJ cahces 无效,重建并重新启动 InteliJ。从 gradle 编译并运行 jar 可以正常工作。有什么建议吗?

【问题讨论】:

标签: java intellij-idea gradle kotlin


【解决方案1】:

这似乎是 InteliJ 中的一个错误,我将为此提交错误报告。在此处为可能遇到类似问题的任何人提供此答案和解决方法。

似乎当类路径上存在某种依赖组合时,当你像这样使用 gradle 依赖时

compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.+'

从 IDE 运行时不会包含它。但是如果你像这样包含它:

compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.+'

然后就可以了。第一个示例确实工作了一段时间,直到我包含更多依赖项。

【讨论】:

  • 您需要检查 gradle 包装器版本。
猜你喜欢
  • 2019-10-20
  • 2013-06-29
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 2021-03-03
相关资源
最近更新 更多