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

标签 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()?

最佳答案

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

然后我直接检查了Spring存储库,发现快照文件是今天(11/23/2017)的。因此,今天出现了新的快照,而该版本中的 execSpec 已消失。由于您的问题是从十月份开始的,我们可能没有使用相同的文件,但您可能遇到了同样的问题。我真的不明白为什么 execSpec 似乎来来去去,但我想这就是使用 SNAPSHOT 版本的代价。

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

编辑: 我问了 Spring 的人here execSpec 发生了什么。因此,bootRun 又回到了 JavaExec。所以根本不可能再在那里使用 execSpec

关于java - 使用gradle加载命令行属性但找不到方法execSpec(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46924150/

相关文章:

Java Bean 实例化错误的 bean

java - 带有 com.mysql.jdbc.ReplicationDriver 的 MySql Master/Slave Spring Hibernate

spring - 如何避免 Spring Web MVC 中的重定向循环

java - new创建的实例依赖@Service成员操作

java - 使用 ng-file-upload 和 Spring Boot 上传文件

java - 在 JUnit 中获取当前的 Spring 事务并提交它

java - 图形中的翻译方法

java - 确定已发生解密

java - Spring数据剩余验证+异常映射器: confusing

java - LocalDate.now() 返回错误的日期