添加带有java、groovy和resources文件夹的gradle源集

添加带有java、groovy和resources文件夹的gradle源集,groovy,gradle,source-sets,Groovy,Gradle,Source Sets,我有一个多模块项目,其中一个添加了一个sourceSet以支持3个源文件夹 apply plugin: 'groovy' apply plugin: 'java' configurations { componentTestCompile.extendsFrom compile, testCompile componentTestRuntime.extendsFrom runtime, testRuntime, componentTestCompile } sourceSet

我有一个多模块项目,其中一个添加了一个sourceSet以支持3个源文件夹

apply plugin: 'groovy'
apply plugin: 'java'

configurations {
    componentTestCompile.extendsFrom compile, testCompile
    componentTestRuntime.extendsFrom runtime, testRuntime, componentTestCompile
}

sourceSets {
    componentTest {
        java {
            srcDir 'src/componentTest/java'
        }
        groovy {
            srcDir 'src/componentTest/groovy'
        }
        resources {
            srcDir 'src/componentTest/resources'
        }
        compileClasspath = sourceSets.main.output + configurations.componentTestCompile
        runtimeClasspath = output + compileClasspath + configurations.componentTestRuntime
    }
}


task componentTest(type: Test) {
    testClassesDir = sourceSets.componentTest.output.classesDir
    classpath = sourceSets.componentTest.runtimeClasspath
    reports.html.destination = file("$reports.html.destination/component")
    reports.junitXml.destination = file("$reports.junitXml.destination/component")

    println classpath
}

check.dependsOn componentTest
执行gradle componentTest时,不会编译Java代码(生成目录中没有相应的类文件)。 但是,当将上述源集应用于简单项目(单个模块)时,它是有效的。我有点搞不清楚这里出了什么问题。我一直在玩弄这些表达

compileClasspath = sourceSets.main.output + configurations.componentTestCompile
runtimeClasspath = output + compileClasspath + configurations.componentTestRuntime

但我还没能找到解决办法

哪些Java代码没有被编译
src/componentTest/java
?我创建了一个示例来显示产生问题的代码。我必须改进我最初的问题。这实际上与多模块无关,而是与注释处理有关。Groovy代码通过注释
@ContextConfiguration(classes=[ComponentTestConfiguration.class])
引用Java类。这导致
找不到注释属性常量的类ComponentTestConfiguration.class
,而对另一个Java类(
新的IshouldBeCompiled().configurationValue()
)的引用是可以的。听起来不像是与生成相关的问题。当您省略
.class
时,它能工作吗?我同意,在方法体中添加一个类引用后,我怀疑这是Groovy编译器的问题。从类文本中删除.class只会产生一个不同的编译器错误:
在@org.springframework.test.context.ContextConfiguration中,只有类和闭包可以用于属性类。奇怪的是,当你从想法出发时,它就起作用了。不要认为它真的与此相关,但很高兴听到它现在起作用了。:-)Groovy编译器错误消息可能意味着编译器没有在其编译类路径上找到该类。