2017-07-31 48 views
2

當從IDE運行應用程序(它是kotlin應用程序,但它應該沒關係)時,IntelliJ不會通過logback-classic依賴於類路徑。我的gradle內部包含一行:Intellij在運行應用程序時不包括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運行時,不包括的logback經典。示例輸出:

... 
/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核是在那裏,而的logback經典不是(和的logback核的logback是經典的傳遞依賴)。

我試着讓InteliJ Cahces無效,重建和重啓InteliJ。從Gradle進行編譯並運行該jar工作正常。有什麼建議麼?

+0

歡迎訪問https://youtrack.jetbrains.com/issues/IDEA並提供[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)錯誤報告。 – CrazyCoder

+0

我設法在一個簡單的項目中重現它 - 現在報告它。 –

回答

0

看來這是InteliJ中的一個錯誤,我將提交一個錯誤報告。對於任何可能遇到類似問題的人,請在此處包含此答案。

看來,當有出現在路徑依賴的某些組合,那麼當你使用這樣

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

它不會包括gradle這個依賴從IDE中運行時。但如果你這樣包含它:

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

然後它的工作。第一個例子確實工作了一段時間,直到我包含更多的依賴關係。

+0

您需要檢查gradle包裝版本。 –

相關問題