我有一个包含许多子项目的项目。
在父项目中,我需要为 port
定义一个变量.每次子项目执行特定任务时,我都需要增加端口(从而确保端口号在我在 --parallel 中运行时不会使用两次)。
我该怎么做呢?
为清晰起见更新
所以对于这样的项目结构
parent -
|->sub-project-1
|
|->sub-project-2
父项目应定义初始端口号。
project.ext.portNumber = 4200 //set a global port number somehow
在每个子项目中我想使用这个端口号
project.portNumber++; //increment in some way
println "${project.name} is using port: ${project.portNumber}"
所以运行
gradlew build
在 parent
项目将输出:sub-project-1 is using port: 4201
sub-project-2 is using port: 4202
如果我运行
gradlew build
在里面 parent/sub-project-2
我会得到sub-project-2 is using port: 4201
随着每个项目的构建,我需要 portNumber 就像 java 中的静态属性一样,即。它适用于所有子项目并且不会被重置。
最佳答案
如果我理解正确,那么您需要为每个子项目分配一个端口号,无论您是从根项目还是从某些子项目中运行完整构建。
因此,您必须在每次执行 gradle 时计算所有项目的端口号。
以下代码:
ext.portNumber = 4200
gradle.projectsEvaluated { g ->
g.rootProject.subprojects { p ->
p.ext.portNumber = gradle.rootProject.portNumber++
println "$p.name [$p.portNumber]"
}
}
针对以下项目结构执行
parent -
|->projA -
|->projA1
|->projA2
|->projB
无论是从根项目还是从子项目之一执行,都会产生以下输出:
projA [0]
projB [1]
projA1 [2]
projA2 [3]
请注意 - 我承认我没有使用
--parallel
广泛检查此解决方案旗帜。然而,作为 projectsEvaluated
在填充任务图之前调用钩子(Hook), --parallel 可能不会影响此配置。如果确实如此,那么我相信您可以同步对根项目的访问 portNumber
通过使用任何java标准同步机制。
关于gradle - 创建一个可以在子项目中递增的静态全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29530162/