拆解Gradle第二弹SourceSet

参考资料:带你认识SourceSet

SourceSet是做什么的?

SourceSets被称作源代码集合,一般可以用它来指定资源的路径(项目下src),是Java插件用来描述和管理源代码及资源的一个抽象概念,是一个Java源代码文件和资源文件的集合,我们可以通过sourceSets更改源集的Java目录或者资源目录等。
写在前面:gradle中有两个sourceSet,一个是android.sourceSet{},另一个是sourceSet{},前者是android插件的sourceSet,后者是Java插件的sourceSet,官方文档中说明的是java插件的sourceSet,Android的只能看源码,两者有一些不同本文只做归纳,详细参考第一行的参考资料。

java插件引入了一个概念叫做SourceSets,通过修改SourceSets中的属性,可以指定哪些源文件(或文件夹下的源文件)要被编译,哪些源文件要被排除。Gradle就是通过它实现Java项目的布局定义。
SourceSets目录结构是固定的Java的标准项目目录布局,SourceSet是project的一个属性,但是需要注意gradle中的SourceSets首字母小写,不然会报错。

java.sourceSet如何使用?

sourceSets {
    main {
        println "name:"+getName() //name:main 同m_java.name
        SourceSet m_java = java {
            println "name:"+getName() //name:java
        }
        SourceDirectorySet set = getJava()
        println "my_java:"+m_java.name +" size:"+set.size() //my_java:main size:1
    }
    println "my_java:"+m_java.name  //my_java:m_java
}

android.sourceSet如何使用?

android{
	sourceSets {
	      main {
	      	println java.name //main Java source
            //在sourceSets中配置指定的Manifest文件(例如在组件化开发中, 我们需要针对debug与release模式下, 指定不同的Manifest文件)
            if (isDebug.toBoolean()) {
                  manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                  manifest.srcFile 'src/main/release/AndroidManifest.xml'
            }
	        //指定其他编译目录
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']	            
	
           java {
                  // 指定源码目录
                  srcDir 'src/java' 
                  //加一些不按照java标准的文件夹结构下的java文件(注意不是替换)
                  srcDir 'src/myJavaPath'
                  //合并
                  sourceSets.all{set ->println "${set.name}的文件是 ${set.java.srcDirs}" }
                  //排除,打包时不包含文件的路径
                  exclude '/test/**' 
                  println "name:"+getName() //name:main Java source
            }
            resources {
                  //指定资源目录
                  srcDir 'src/resources'
                  //排除,打包时不包含文件的路径
                  exclude '/resource/**' 
                  println "name:"+getName() //name:main Java resources
            }
            assets {
                println "name:"+getName() //name:main assets
            }
            //
             Set<File> files = java.sourceFiles.getFiles();
            for (File mfile:files){
                println "文件名:"+mfile.name
            }
	      }
	}
}

在这里插入图片描述

SourceSet如何输出

点击build菜单,make/rebuild都可以
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章