构建应用程序时从 gradle 任务指定配置文件

Specify profile from gradle task when building app

我使用配置文件在编译时定义数据源的类型。因此,例如,我可以通过 运行 命令构建具有 MySQL 配置的应用程序:

./gradlew build -Dquarkus.profile=mysql

现在我需要为此创建一个 gradle 任务,但我找不到一种方法来定义系统 属性 仅当该任务被执行时(而不是全局地当任务被执行时)编)。有什么建议吗?

马可.

以防有人遇到同样的问题。当任务图准备好时,可以定义配置文件属性:

gradle.taskGraph.whenReady {
  taskGraph ->
    if (taskGraph.hasTask(project(':my-module').myTask)) {
       System.setProperty('quarkus.profile', 'myProfile')
    }
}

这样您就可以将特定任务与您要启用的配置文件相关联。

如果您想 运行 具有不同配置文件的多个任务,这将不起作用,因为上下文在所有任务之间共享。为此,我使用了一个 GradleBuild 任务,该任务在单独的上下文中设置系统 属性 和 运行s:

task myTask(type: GradleBuild) {
   buildFile = "build.gradle"
   dir = new File(project.buildDir, "myTask")
   tasks = ['build']
   Map<String, String> systemArgs = new HashMap<>();
   systemArgs.putAll(startParameter.systemPropertiesArgs)
   systemArgs.put("quarkus.profile", "myProfile")
   startParameter.systemPropertiesArgs = systemArgs
}