我正在尝试根据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()?

最佳答案

从Spring Boot 2.0.0开始,execSpec应该在bootRun中工作。但是我今天遇到了同样的问题。奇怪的是,它一度起作用,但在我更改了项目名称后几秒钟后停止了工作。
我意识到此更改触发了Gradle刷新,并且之后以某种方式在我的gradle缓存中存在spring-boot-gradle-plugin-2.0.0.BUILD-SNAPSHOT.jar的两个不同版本。 On是57 kb,其他58 kb。我解开了 jar 的包装,调查了内容,发现区别恰恰是org.springframework.boot.gradle.tasks.run.BootRun类,一个类为3 kb,另一个版本为7 kb。因此,我认为57 kb版本缺少execSpec

然后我直接检查了Spring存储库,并意识到快照文件来自今天(11/23/2017)。因此,今天有一个新的快照,而该版本中的execSpec已不存在。由于您的问题来自10月,我们可能无法使用相同的文件,但是您可能遇到了相同的问题。我不太了解为什么execSpec似乎来来去去,但是我想这就是使用SNAPSHOT版本的代价。

因此,除了等到第一个稳定的版本或下一个包含execSpec的下一个snaphot或提供设置系统变量的另一种可能性之外,我们对此问题无能为力。

编辑:
我问Spring-Guys here execSpec怎么了。因此,bootRun又回到了JavaExec。因此根本不可能再在那里使用execSpec

10-08 14:39