当默认的工程结构不适用的时候,你可能需要配置它。根据 Gradle 文档说明,可以通过如下方式重新配置Java工程的 sourceSets
:
sourceSets {
main {
java {
srcDir 'src/java'
}
resources {
srcDir 'src/resources'
}
}
}
注意: srcDir
会添加指定的文件夹到现有的源文件夹列表中( Gradle 文档没有提到这个,但是的确是这样)。
要替换默认的源文件夹的话,可以给 srcDirs
指定一个路径数组 。下面使用对象调用另一种方式配置:
sourceSets {
main.java.srcDirs = ['src/java']
main.resources.srcDirs = ['src/resources']
}
想要了解更多的信息,请参考Gradle文档的Java插件部分。
Android插件也使用相似的语法,但是它有它自己的 sourceSets ,这些已经内置在 android 对象中了。
这儿有个示例,它使用了旧工程结构的源代码,并且重新映射了 androidTest sourceSet 到测试文件夹:
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
androidTest.setRoot('tests')
}
}
注意: 因为旧结构中把所有的源文件( java, aidl, renderscript, and java resources )都放在同一文件夹下,所以我们需要重新映射这些 sourceSet 的新组件到同一src目录.
注意: setRoot()方法会移动整个 sourceSet (包括其下的子文件夹)到一个新文件夹。这里是移动src/androidTest/*到tests/*。
这些都是 Android 特有的,并不适用于 Java sourceSets 。
这是一个迁移的例子(译者注:比如从旧工程结构迁移过来)。