簡體   English   中英

依賴關系未復制到jar中(在Gradle中)

[英]Dependencies not copied into jar (in Gradle)

TL; DR我希望將模塊的依賴關系構建到其.jar中,但它們似乎不是。

我正在使用Gradle來構建一個項目。 我有兩個子項目, app (Android模塊)和tests (Java模塊),由IntelliJ創建。

由於我想在tests內容中使用app中定義的類,因此我添加了適當的依賴項。 受到這個答案的啟發,我有以下設置:

應用程序/的build.gradle:

...
task jarTask(type: Jar) {
    baseName ="${project.archivesBaseName}"
    from android.sourceSets.main.java
}

configurations {
    jarConfiguration
}

artifacts {
    jarConfiguration jarTask
}

測試/的build.gradle

...
dependencies {
    ...
    testCompile project(path: ':app', configuration: 'jarConfiguration')
}

但是, app一個類導入org.json.JSONObject 由於這是由Android SDK提供的, app可以很好地找到它 - 但是當我嘗試運行測試時,我得到(在:tests:compileTestJava )“package org.json不存在”。 但是,如果我更新tests / build.gradle

...
dependencies {
    ...
    testCompile project(path: ':app', configuration: 'jarConfiguration')
    testCompile 'org.json:json:20090211'
}

(見這里 )然后測試正確運行。

這不是我所期望的 - 如果.jar沒有打包它的依賴項,那么依賴於.jar的任何項目也必須明確地依賴於傳遞依賴 - 這不會導致依賴關系定義快速增加嗎?

我在這里這里遇到了“fatJar”的概念,這似乎是“帶有依賴關系的jar”的同義詞 - 但是改變了我的app / build.gradle來讀取

...
task jarTask(type: Jar) {
    baseName ="test-${project.archivesBaseName}"
    from android.sourceSets.main.java
}

task fatJar(type: Jar) {
    baseName = project.name + "-all"
    from {configurations.compile.collect {it.isDirectory() ? it : zipTree(it)}}
    with jarTask
}

configurations {
    jarConfiguration
}

artifacts {
    jarConfiguration fatJar
}

仍然給出package org.json does not exist的錯誤。 這似乎是因為org.json未在app / build.gradle文件中顯式調用為依賴項。 使用以下app / build.gradle,我的項目按預期構建並運行測試:

...
dependencies {
    ...
    compile 'org.json:json:20090211'
}

task jarTask(type: Jar) {
    baseName ="${project.archivesBaseName}"
    from android.sourceSets.main.java
}

task fatJar(type: Jar) {
    baseName = project.name + "-all"
    from {configurations.compile.collect {it.isDirectory() ? it : zipTree(it)}}
    with jarTask
}

configurations {
    jarConfiguration
}

artifacts {
    jarConfiguration fatJar
}

(注意,如果你只想要fatJar任務,你可以簡單地from files({configurations.compile.collect {it.isDirector() ? it : zipTree(it)}}, android.sourceSets.main.java)設置from files({configurations.compile.collect {it.isDirector() ? it : zipTree(it)}}, android.sourceSets.main.java)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM