我有一个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
但看起来只能用于过滤包和类名。我觉得这应该很简单。我在这里缺少什么?
答案 0 :(得分:0)
您需要至少设置testClassesDir
和classpath
。有关详细信息,请参阅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")
}
}
,无需任何其他配置即可获得所需的结果。