在运行应用程序时,Intellij不包括对classpath的gradle依赖

当从IDE运行应用程序(这是kotlin应用程序,但不应该),IntelliJ不包括通过对类路径的logback-classic依赖。 我的gradle版本包含一行:

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运行的输出不包括logb​​ack-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工作正常。 有什么建议么?

看来这是InteliJ的一个bug,我将提交一个bug报告。 对于任何可能遇到类似问题的人,请在此解决此问题。

看起来,当类路径中存在一定的依赖关系组合时,那么当你使用gradle依赖关系就像这样

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

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

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

那么它的工作。 第一个例子工作了一段时间,直到我包括更多的依赖。