參考資料:帶你認識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都可以