构建应用程序时从 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
}
我使用配置文件在编译时定义数据源的类型。因此,例如,我可以通过 运行 命令构建具有 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
}