scu*_*bbo 5 java android gradle android-gradle-plugin
TL; DR我希望将模块的依赖关系构建到其.jar中,但它们似乎不是.
我正在使用Gradle来构建一个项目.我有两个子项目,app
(一个Android模块)和tests
(一个Java模块),由IntelliJ创建.
由于我想使用app
内容中定义的类tests
,我添加了适当的依赖项.受到这个答案的启发,我有以下设置:
应用程序/的build.gradle:
...
task jarTask(type: Jar) {
baseName ="${project.archivesBaseName}"
from android.sourceSets.main.java
}
configurations {
jarConfiguration
}
artifacts {
jarConfiguration jarTask
}
Run Code Online (Sandbox Code Playgroud)
测试/的build.gradle
...
dependencies {
...
testCompile project(path: ':app', configuration: 'jarConfiguration')
}
Run Code Online (Sandbox Code Playgroud)
但是,app
进口中的一个类org.json.JSONObject
.由于这是由Android SDK提供的,app
可以很好地找到 - 但是当我尝试运行测试时,我得到(in :tests:compileTestJava
)"package org.json不存在".但是,如果我更新tests/build.gradle
...
dependencies {
...
testCompile project(path: ':app', configuration: 'jarConfiguration')
testCompile 'org.json:json:20090211'
}
Run Code Online (Sandbox Code Playgroud)
(见这里)然后测试正确运行.
这不是我所期望的 - 如果.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
}
Run Code Online (Sandbox Code Playgroud)
仍然给出一个错误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
}
Run Code Online (Sandbox Code Playgroud)
(请注意,如果您只想要 fatJar 任务,您可以简单地设置from files({configurations.compile.collect {it.isDirector() ? it : zipTree(it)}}, android.sourceSets.main.java)
归档时间: |
|
查看次数: |
2842 次 |
最近记录: |