如何使用CLI-Args输入创建Gradle BootRun任务

时间:2019-03-18 08:08:24

标签: java spring-boot gradle

上下文:

我正在尝试创建两个任务来激活Gradle中的BootRun任务。我从其他模块调用这些任务。)这是一个SpringBootApp,它接受命令行参数并根据作为输入的参数进行操作。除此之外,如果有帮助,它是代码生成器/表生成器。

Gradle

task generateClass(dependsOn:":tools:codegen:clean") {
    bootRun {
        args = ["--class"]
    }

}

task generateMetadata(dependsOn:":tools:codegen:clean") {
        bootRun {
            args = []
            args = ["--metadata"]
        }


}



generateClass.finalizedBy generateClass:bootRun
generateMetadata.finalizedBy generateMetadata:bootRun

问题

上述问题是,每当我从GenerateClassGenerateMetadata任务调用 BootRun 时,它都会调用不带参数的单个BootRun我已经为任务做好了。

Should Work:
GenerateClass --> ClassArgs --> Run
GenerateMetadata --> MetadataArgs --> Run

But Works as: 
Args = which ever task from above runs first, their arguments are set.
So sometimes it is 
GenerateClass --> MetadataArgs --> Run
GenerateMetadata --> MetadataArgs --> Run
or
GenerateClass --> ClassArgs --> Run
GenerateMetadata --> ClassArgs --> Run

因此,我的解决方案是使用不同的参数创建自定义bootRun任务,或者通过运行任务有效地传递CLI参数。

注意:是的,SpringBoot CLI解析正确,因为我已经对其进行了测试。另外,我从其他模块调用这些任务。

1 个答案:

答案 0 :(得分:0)

阅读documentation链接的JB Nizet之后!我创建了这些BootRun任务,这些任务接受commandLineArguments并还使用spring-profiles!希望这是有用的:)

task generateClass(type: org.springframework.boot.gradle.tasks.run.BootRun, dependsOn: 'build') {
        doFirst() {
            main = 'com.etcbase.uyap.generator.GeneratorApplication'
            classpath = sourceSets.main.runtimeClasspath
            args '--class'
            systemProperty 'spring.profiles.active', 'dev'
        }
    }

    task generateMetadata(type: org.springframework.boot.gradle.tasks.run.BootRun, dependsOn: 'build') {
        doFirst() {
            main = 'com.etcbase.uyap.generator.GeneratorApplication'
            args '--metadata'
            classpath = sourceSets.main.runtimeClasspath
            systemProperty 'spring.profiles.active', 'test'
        }
    }