gradle - 创建一个可以在子项目中递增的静态全局变量

标签 gradle

我有一个包含许多子项目的项目。

在父项目中,我需要为 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 buildparent项目将输出:
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/

相关文章:

环境占位符的 Gradle 属性

java - 在哪里定义服务器端jar的类路径? manifest.mf与CLI参数-cp

java - 对本地存储库(gradle)中的依赖关系感到困惑

Gradle 插件作为对另一个模块的依赖

java - Spring Boot 多模块 Gradle 构建 - 多个 "Fat Jars"

android - React Native gradle executionHistory.bin 太大

gradle - 如何声明 Gradle 自定义任务的依赖项?

java - 带有依赖项的 jar spring boot gradle

java - 将 Gradle.build 版本导入 Spring Boot

java - Gradle同步失败: Cause: unable to find valid certification path to requested target on MacOS