考虑以下Gradle项目结构:
- root
|- build.gradle
|- barProject
|- build.gradle
|- fooProject
|- build.gradle
根在哪里构建。gradle的子项目配置如下:
subprojects {
apply plugin: 'java'
//bunch of other stuff
}
现在,当我在根项目上调用gradlew build
时,它会自动配置两个子项目,然后构建它们——一切都很好。
我也知道我可以用各种方法跳过一个特定的任务(onlyIF()
,[taskName]。启用=false
等),但是当我使用build
上的任何一个时,Gradle仍然运行所有依赖的任务(CompileJava
,ProcResources
,类
等),直到最后击中build
,然后跳过。
我的问题是,有没有办法让Gradle在配置阶段结束后立即停止并转到下一个子项目?
编辑:
澄清;每个子项目都有一个名为skip
的属性,该属性在配置阶段进行评估。
现在,当我在根项目上调用gradlew build
时,理想情况下,我希望Gradle检查该属性,如果它是真的,那么就完全跳过相应的项目。
Executing external task 'build'...
//check project.skip -> IF true -> skip project, go to :foo ELSE continue
:bar:compileJava
:bar:processResources UP-TO-DATE
:bar:classes
:bar:jar
:bar:startScripts
:bar:distTar
:bar:distZip
:bar:assemble
:bar:compileTestJava UP-TO-DATE
:bar:processTestResources UP-TO-DATE
:bar:testClasses UP-TO-DATE
:bar:test UP-TO-DATE
:bar:check UP-TO-DATE
:bar:build
//check project.skip -> IF true -> skip project, go to end ELSE continue
:foo:compileJava
:foo:processResources UP-TO-DATE
:foo:classes
:foo:jar
:foo:startScripts
:foo:distTar
:foo:distZip
:foo:assemble
:foo:compileTestJava UP-TO-DATE
:foo:processTestResources UP-TO-DATE
:foo:testClasses UP-TO-DATE
:foo:test UP-TO-DATE
:foo:check UP-TO-DATE
:foo:build
BUILD SUCCESSFUL
我希望这更有意义
首先,一个简单的解决方案是准确地调用您需要的任务。在简单的Gradle构建中,任务名称是唯一的。然而,在多项目构建中,每个项目都可以有一个具有特定名称的任务。这就是Gradle引入任务路径的原因。任务路径将唯一的项目路径与项目内唯一的任务名称相结合::projectX:taskY
。
使用项目路径,可以轻松指定要执行的特定于项目的任务::为根项目中的
,以及build
任务指定build:
要执行的任务名称由Gradle
设置的
StartParameter
对象管理。这些设置可以在
设置中修改。gradle
文件,其中还包括子项目:
include ':foo', ':bar'
startParameter.excludedTaskNames += ':foo:build'
此行将
foo
子项目的build
任务从执行中排除。如果满足特定条件,可以将子项目任务路径(甚至独立于任务名称)添加到排除的任务名称中。但是,我没有找到访问构建文件中的设置的方法,因此在配置阶段无法使用此解决方案。但是,如果您的条件仅基于项目/系统属性,则可以从
设置访问它们。格雷德尔
。
我想到了配置阶段的另一个解决方案,但它基本上就是你已经提到的,因为它简单地跳过了任务:
if (project.skip) {
project.tasks.all { task -> task.enabled = false }
}
这样,项目中的所有任务(不仅是
构建任务
任务)都将被跳过。
请考虑,这些任务也可以执行,因为它们为另一个项目创建了一个依赖项。如果
foo
是bar
的项目依赖项,则即使gradle:bar:build
也将执行任务:foo:jar
及其任务依赖项。您可以使用Gradle命令行选项-a
或-no rebuild
或设置中的以下条目禁用此行为。格雷德尔
:
startParameter.buildProjectDependencies = false
问题内容: 我们需要能够在某些环境中跳过子模块。 有问题的模块包含集成测试,并且需要半小时才能运行。因此,我们希望在CI服务器上进行构建时将其包括在内,但是当开发人员在本地进行构建(并运行测试)时,我们希望跳过该模块。 有没有办法通过配置文件设置来做到这一点?我已经进行了一些谷歌搜索,并在这里查看了其他问题/答案,但没有找到一个好的解决方案。 我想一个选择是从父级中完全删除该子模块,然后在CI服务
请注意:“我编辑了这个问题” 我正在观察一个非常奇怪的情况。我在Jenkins中配置了两个具有相同配置的作业,但其中一个是连续构建,另一个是夜间构建[poll scm configured@middign]使用Sonarqube配置生成报告。 注意:我使用的是maven 3.3.1版本和SonarQube 5.1
嗨我在网上搜了一遍,看了一堆文章,所以问题和文档都找不到解决办法,这里是我的问题。 我有一个多模块maven项目,其中包含三个模块a、B和C,a和B独立,C依赖于a和B,当然我有一个父项目。我还设置了一个jenkins服务器来构建这些项目,以及一个nexus存储库。 如有任何帮助,不胜感激。谢谢!
主要内容:1- 介绍,2- 示例模型,3-创建项目数学库,4- 创建另一个项目:MathWebApp,5- 创建GradleMain项目,6- 构建项目,7- 运行MathWebApp1- 介绍 本教程文章基于: Eclipse Java EE IDE for Web Developers. Version: Mars.1 Release (4.5.1) 如果您是初学者Gradle的。那么建议先看看初学者Gradle(Gradle Hello world)的文章: http://www.yiib
我有一个Jenkins/Maven/Git多模块项目,其中包含一个子模块(由承包商开发,没有什么可以改变它)。由于Git和子模块,我必须使用命令“Git Clone-recursive ssh://xxxxxxx.Git”在Linux中克隆repo。 这意味着我必须检查Jenkins Git插件选项“Advanced sub-modules Behavious”和“recursivy update
有一个带有几个嵌套级别的maven多模块项目。当我跑的时候 有些项目是用日志消息生成的 分叉构建的项目让我很头疼,因为它没有在构建的JAR上调用mvn-install-plugin,因此没有将其中一些复制到本地maven存储库中。