为所有Java子项目定义源集

时间:2013-12-11 16:16:13

标签: gradle source-sets

我想知道是否可以在gradle中定义一个源集(例如integrationTests),它可以应用于所有使用'java'插件的子项目?

这样的东西
sourceSets {
    integTest {
        java.srcDir file('src/integration-test/java')
        resources.srcDir file('src/integration-test/resources')
        compileClasspath = sourceSets.main.output + configurations.integTest
        runtimeClasspath = output + compileClasspath
    }
}

如上所述here适用于所有java子项目?

感谢您提供有用的提示!

2 个答案:

答案 0 :(得分:4)

您可以通过应用插件过滤构建的子项目。在您的示例中,这将如下所示:

def javaProjects() {
    subprojects.findAll { project -> 
        project.plugins.hasPlugin('java') 
    }
}

configure(javaProjects()) {
    sourceSets {
        integTest {
            java.srcDir file('src/integration-test/java')
            resources.srcDir file('src/integration-test/resources')
            compileClasspath = sourceSets.main.output + configurations.integTest
            runtimeClasspath = output + compileClasspath
        }
    }
}

答案 1 :(得分:0)

因为在子项目的构建脚本之前评估了根项目的构建脚本,所以client_secret不起作用(至少在我使用的Gradle 4.8.1中)。

相反,您可以在根项目中注册一个回调,每次在子项目中应用插件时都会调用该回调:

subprojects.findAll{project -> project.plugins.hasPlugin('java')}