[英]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.