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

Posted

技术标签:

【中文标题】使用 gradle 加载命令行属性但找不到方法 execSpec()【英文标题】:Using gradle to load command line properties but cannot find method execSpec() 【发布时间】:2018-04-06 01:19:33 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

从 Spring Boot 2.0.0 开始,execSpec 应该在 bootRun 中工作。但是我今天遇到了同样的问题。奇怪的是,在我更改项目名称后,它曾一度工作,几秒钟后停止工作。 我意识到这个更改触发了 Gradle 刷新,不知何故,我的 gradle 缓存中有两个不同版本的 spring-boot-gradle-plugin-2.0.0.BUILD-SNAPSHOT.jar。 On 是 57 kb,另一个是 58 kb。我打开了 jars 的包装,查看了里面的内容,发现差异正是 org.springframework.boot.gradle.tasks.run.BootRun 类,一个是 3 kb,另一个是 7 kb。所以我猜57 kb版本缺少execSpec

然后我直接查看了 Spring 存储库,发现快照文件是从今天(2017 年 11 月 23 日)开始的。所以今天有一个新的快照出现,execSpec 在那个版本中消失了。由于您的问题是从 10 月开始的,我们可能没有使用相同的文件,但您可能遇到了同样的问题。我真的不明白为什么 execSpec 似乎来来去去,但我想这就是使用 SNAPSHOT 版本的代价。

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

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

【讨论】:

以上是关于使用 gradle 加载命令行属性但找不到方法 execSpec()的主要内容,如果未能解决你的问题,请参考以下文章

模块qtcore.dll已经加载,但找不到入口点怎么解决

Windows 成功地加载了这个硬件的设备驱动程序,但找不到硬件设备。 (代码 41)

模块“msvcp110.dll”已加载,但找不到入口点DllRegisterserver。 怎么办

如何使用命令行输入来选择要在 gradle 构建中使用的属性文件?

关于:找不到.dll文件||已加载但找不到入口点的解决方法

从 Gradle 将系统属性传递到 Spring Boot