spring – 混合Java / Groovy源的Gradle编译排序问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了spring – 混合Java / Groovy源的Gradle编译排序问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1898字,纯文字阅读大概需要3分钟。
内容图文
我在混合Java / Groovy环境中遇到编译排序问题.我们使用的是Gradle 2.1,JDK 7和Groovy 2.3.使用Gradle插件和相同的build.gradle文件,代码在STS(Spring Tool Suite)中编译良好,但在命令行上运行构建时失败. STS配置为使用Groovy Eclipse插件,如果我理解正确,它使用自己的编译器.所以我认为当我们使用Gradle的Groovy插件中的Groovy编译器时,这个问题源于编译排序问题.这是Groovy类:
@Component
@ToString(includeNames = true, includePackage = false)
class ManagedCloseableHttpClientFactory implements ClientHttpRequestFactory {
@Delegate
HttpComponentsClientHttpRequestFactory factory
...
}
ClientHttpRequestFactory是一个Spring接口,由Spring类HttpComponentsClientHttpRequestFactory实现.在系统的其他地方,我们有一个用@Configuration注释的Java类,其中使用@Autowired注入ManagedCloseableHttpClientFactory.像这样:
@Configuration
public class FooConfiguration {
@Autowired
private ManagedCloseableHttpClientFactory httpClientFactory;
...
}
当从命令行运行构建时,我们收到以下错误消息:/Users/xyz/source/prj/common/build/tmp/compileGroovy/groovy-java-stubs/common/web/client/ManagedCloseableHttpClientFactory.java: 10:错误:ManagedCloseableHttpClientFactory不是抽象的,并且不会覆盖ClientHttpRequestFactory中的抽象方法createRequest(URI,HttpMethod).如果我们将标记为@Autowired的字段移动到使用@Configuration注释的Groovy类,则一切正常,但不会在Java类中声明它.我猜这是一个编译排序问题.在我们的Gradle文件中,我们使用了groovy插件,并修改了源目录,如下所示:
project.sourceSets.main.java.srcDirs = []
project.sourceSets.test.java.srcDirs = []
project.sourceSets.main.groovy.srcDirs = ["src/main/java", "src/main/groovy"]
project.sourceSets.main.resources.srcDirs += ["config"]
project.sourceSets.test.groovy.srcDirs += ["src/test/java","src/test/groovy"]
这里最好的方法是什么?谢谢.
解决方法:
Groovy编译器的存根生成器有一些限制.我最好的猜测是你不能让Java调用由@Delegate实现的Groovy方法.我试图摆脱这个特定的Java-> Groovy依赖或@Delegate的这种特殊用法(即手动实现委托).
内容总结
以上是互联网集市为您收集整理的spring – 混合Java / Groovy源的Gradle编译排序问题全部内容,希望文章能够帮你解决spring – 混合Java / Groovy源的Gradle编译排序问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。