在子文件夹中组织Gradle项目

时间:2014-05-08 18:25:42

标签: gradle

我有一个Gradle项目,我试图在单独的源文件夹中组织。我们希望采用这样的约定:项目将有一堆“功能”文件夹,每个文件夹都有自己的主/测试文件夹,如下例所示:

feature1/main/java
feature1/test/java
feature2/main/java
feature2/test/java

所以我开始编写一些Groovy来自动在我的构建脚本中管理它:

files { file('./').listFiles() }.collect { relativePath(it) }.each { f ->
  if (file(f).isDirectory()) {
    def m = f + '/main/java'
    def t = f + '/test/java'
    if (file(m).exists() && file(m).isDirectory()) {
      sourceSets.main.java.srcDir m
    }
    if (file(t).exists() && file(t).isDirectory()) {
      sourceSets.test.java.srcDir t
      task('test' + f, type: Test) {
        // ?!?
      }
    }
  }
}

上述代码的要点是将main / test文件夹添加到源文件夹,并添加一个新的测试任务,该任务只执行特定功能的测试。但是,我似乎无法找到一种方法来告诉Gradle只运行该特定文件夹中包含的测试。

我尝试使用include但看起来只能用于过滤包和类名。我觉得这应该很简单。我在这里缺少什么?

3 个答案:

答案 0 :(得分:0)

您需要至少设置testClassesDirclasspath。有关详细信息,请参阅Gradle Build Language Reference中的Test

答案 1 :(得分:0)

看看:gradle-1.11 \ samples \ java \ multiproject \或获取eclipse的gradle插件(参见https://github.com/spring-projects/eclipse-integration-gradle/http://estiloasertivo.blogspot.com/2013/03/tutorial-howto-install-and-configure.html)并使用它来生成子项目的项目。< / p>

答案 2 :(得分:0)

这确实非常简单。我修改了上面的代码段如下:

task('test' + f, type: Test) {
  include fileTree(t).collect { 
    '**/' + it.name.replaceAll("\\.java", "\\.class") 
  }
}

,无需任何其他配置即可获得所需的结果。