我已将我的项目修改为多平台。
以前的状态:
只有一个模块(项目)和一个build.gradle。所有测试都在测试文件夹中,当我运行gradlew testDebug
时,我的所有500个测试都在运行。
新州: 我有一个主要的gradle项目,除了持有3个模块之外什么都不做
这些模块中的每一个都有自己的gradle文件,但只能构建android和rasberryPi模块。在它们的依赖项中(在它们各自的build.gradle文件中),它们针对“核心”模块进行编译。像这样:
dependencies {
compile project(':clapcore')
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.android:android:4.1.1.4'
}
我所有的500项测试现在都在核心。因此,当我在Android模块上执行gradlew clean assembleDebug testDebug
时,未检测到任何测试,并且test-result的文件夹为空。
我试图直接在核心模块上运行testDebug
命令,但由于它不是自己构建的,因此收到错误:
FAILURE: Build failed with an exception.
* What went wrong:
Task 'testDebug' not found in project ':core'.
所以我的问题是:有没有办法,在gradle中,告诉“testDebug”命令运行其模块依赖(核心)中的所有测试?
我还尝试在android模块的依赖项中添加一个testCompile,但它不起作用,如下所示:
dependencies {
compile project(':clapcore')
testCompile project(':clapcore')
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.android:android:4.1.1.4'
}
谢谢!
修改
我发现我可以在核心上执行命令gradlew build
,它将在“核心”模块中运行测试。但是如果有可能的话,我想通过“级联”运行这些测试。
*编辑2 *
我发现我可以在'android'模块上执行命令gradlew buildNeeded
,它将为android模块和核心进行构建。不幸的是,它只是在发布!如果有人可以指出我使用此功能的方法,但在调试中,这将是惊人的。我在调试中需要它,因为发布版本启动了更多的任务,如更改版本,提交git,推送等等......这仅适用于每晚构建,因此需要进行调试。
答案 0 :(得分:0)
在阅读Gradle网站的文档后,我发现非常好的函数buildNeeded
只运行所有buildType而你无法改变。允许您选择buildType的唯一函数分别是assembleDebug
和assembleRelease
。
由于我的发布过程(标记的创建,版本更新,推送到git等等)在assembleRelease
之后运行,我被卡住了,因为在夜间构建中运行buildNeeded
会触发发布过程。
所以我修改了build.gradle文件以创建一个名为releaseVersion
的任务,该任务依赖于zipalignRelease
。因此,当我真的想要创建一个版本时,我会调用releaseVersion
但是当我只想在每晚构建中构建/测试时,我会调用buildNeeded
命令。
需要注意的事项:测试结果将出现在每个模块的每个“build”文件夹中。如果使用CI,请务必小心清洁所有模块。