使用gradle加载命令行属性但找不到方法execSpec()

时间:2017-10-25 04:44:26

标签: java spring spring-boot gradle

我正在尝试按照Delegate command line system properties to spring-boot-gradle-plugin runApp task #592

从命令行属性加载-Dspring.profiles.active

我的gradle构建文件的一部分是

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'jacoco'
apply plugin: 'docker'

bootRun {
  execSpec {
    systemProperty 'com.example.foo', 'bar'
  }
}

我收到错误消息

Could not find method execSpec() for arguments [build_48hmmm554of8gjd2p2pou6vn0$_run_closure5$_closure17@30ae2373] on task ':bootRun' of type org.springframework.boot.gradle.run.BootRunTask.

如何加载execSpec()?

2 个答案:

答案 0 :(得分:3)

从Spring Boot 2.0.0开始,execSpec应该在bootRun中运行。但是我今天遇到了同样的问题。奇怪的是,它在某个时刻起作用,并在我改变项目名称后几秒钟停止工作。 我意识到这个更改触发了Gradle刷新,不久之后我的gradle缓存中有两个不同版本的spring-boot-gradle-plugin-2.0.0.BUILD-SNAPSHOT.jar。 On是57 kb,另一个是58 kb。我解压缩了罐子,查看了内容,发现差异恰好是类org.springframework.boot.gradle.tasks.run.BootRun,一个是3 kb,另一个是7 kb。所以我猜57 kb版本缺少execSpec

然后我直接检查了Spring存储库并意识到快照文件来自今天(2017年11月23日)。因此,今天出现了一个新的快照,execSpec在该版本中消失了。由于您的问题来自十月,我们可能不使用相同的文件,但您可能遇到了同样的问题。我真的不明白为什么execSpec似乎要来去,但我想这是使用SNAPSHOT版本的代价。

因此,除了等到第一次稳定构建或下一次包含execSpec的快照或提供另一种设置系统变量的可能性之外,我们对该问题的处理能力不高。

编辑: 我问春天的家伙here execSpec发生了什么。因此bootRun又回归JavaExec。因此,再也不可能在那里使用execSpec

答案 1 :(得分:1)

在更高版本的 Spring Boot 中,您可以省略 ExecSpec,如下所示:

bootRun {
    systemProperty 'com.example.foo', 'bar'
}