微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

spring – 混合Java / Groovy源的Gradle编译排序问题

我在混合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的这种特殊用法(即手动实现委托).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐