gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:09:34 28 4
gpt4 key购买 nike

我在混合 Java/Groovy 环境中遇到编译排序问题。我们正在使用 Gradle 2.1、JDK 7 和 Groovy 2.3。代码在 STS(Spring Tool Suite)中编译良好,使用 Gradle 插件和相同的 build.gradle 文件,但在命令行上运行构建时会失败。 STS 配置为使用 Groovy Eclipse 插件,如果我理解正确的话,它使用自己的编译器。所以我认为这个问题源于我们使用 Gradle 的 Groovy 插件中的 Groovy 编译器时的编译顺序问题。这是 Groovy 类:

@Component
@ToString(includeNames = true, includePackage = false)
class ManagedCloseableHttpClientFactory implements ClientHttpRequestFactory {
@Delegate
HttpComponentsClientHttpRequestFactory factory
...
}

ClientHttpRequestFactory 是一个 Spring 接口(interface),由 Spring 类 HttpComponentsClientHttpRequestFactory 实现。在系统的其他地方,我们有一个用@Configuration 注解的Java 类,其中ManagedCloseableHttpClientFactory 是使用@Autowired 注入(inject)的。像这样:
@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 不是抽象的,不会覆盖抽象方法 createRequest(URI ,HttpMethod) 在 ClientHttpRequestFactory .如果我们将用@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 编译器的 stub 生成器有一些限制。我最好的猜测是你不能让 Java 调用由 @Delegate 实现的 Groovy 方法。 .我会尝试摆脱这种特定的 Java->Groovy 依赖或 @Delegate 的这种特殊用法(即手动执行委托(delegate))。

关于spring - 混合 Java/Groovy 源的 Gradle 编译排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25980206/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com