【发布时间】:2014-09-25 12:47:30
【问题描述】:
TL;DR 我希望将模块的依赖项构建到其 .jar 中,但它们似乎没有。
我正在使用 Gradle 构建一个项目。我有两个子项目,app(Android 模块)和tests(Java 模块),由 IntelliJ 创建。
由于我想在tests 的内容中使用app 中定义的类,所以我添加了适当的依赖项。受this answer 的启发,我进行了以下设置:
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)“包 org.json 不存在”。但是,如果我将 tests/build.gradle 更新为
...
dependencies {
...
testCompile project(path: ':app', configuration: 'jarConfiguration')
testCompile 'org.json:json:20090211'
}
(请参阅here)然后测试运行正确。
这不是我所期望的——如果 .jar 不打包其依赖项,那么任何依赖于该 .jar 的项目也必须显式依赖传递依赖项——这不会导致依赖项定义快速增加?
【问题讨论】:
-
为什么要库Jar中的应用程序类?好像走错路了。
-
该应用程序是一个 Android 应用程序,它将从服务器(也是项目的一部分)接收 JSON。该应用程序包含表示这些 JSON 响应的类。作为测试的一部分,我想启动服务器的测试实例,从中获取响应,并检查它们是否可以正确反序列化为这些类。因此,我需要测试依赖于应用程序类。
标签: java android gradle android-gradle-plugin