3.2.1 配置结构

当默认的工程结构不适用的时候,你可能需要配置它。根据 Gradle 文档说明,可以通过如下方式重新配置Java工程的 sourceSets:

  1. sourceSets {
  2. main {
  3. java {
  4. srcDir 'src/java'
  5. }
  6. resources {
  7. srcDir 'src/resources'
  8. }
  9. }
  10. }

注意: srcDir 会添加指定的文件夹到现有的源文件夹列表中( Gradle 文档没有提到这个,但是的确是这样)。

要替换默认的源文件夹的话,可以给 srcDirs 指定一个路径数组 。下面使用对象调用另一种方式配置:

  1. sourceSets {
  2. main.java.srcDirs = ['src/java']
  3. main.resources.srcDirs = ['src/resources']
  4. }

想要了解更多的信息,请参考Gradle文档的Java插件部分。

Android插件也使用相似的语法,但是它有它自己的 sourceSets ,这些已经内置在 android 对象中了。

这儿有个示例,它使用了旧工程结构的源代码,并且重新映射了 androidTest sourceSet 到测试文件夹:

  1. android {
  2. sourceSets {
  3. main {
  4. manifest.srcFile 'AndroidManifest.xml'
  5. java.srcDirs = ['src']
  6. resources.srcDirs = ['src']
  7. aidl.srcDirs = ['src']
  8. renderscript.srcDirs = ['src']
  9. res.srcDirs = ['res']
  10. assets.srcDirs = ['assets']
  11. }
  12. androidTest.setRoot('tests')
  13. }
  14. }

注意: 因为旧结构中把所有的源文件( java, aidl, renderscript, and java resources )都放在同一文件夹下,所以我们需要重新映射这些 sourceSet 的新组件到同一src目录.

注意: setRoot()方法会移动整个 sourceSet (包括其下的子文件夹)到一个新文件夹。这里是移动src/androidTest/*到tests/*。

这些都是 Android 特有的,并不适用于 Java sourceSets

这是一个迁移的例子(译者注:比如从旧工程结构迁移过来)。