Gradle中列出与特定模式匹配的子目录的最常用方法
在我的Gradle脚本中,我希望在源代码集中包含与特定模式匹配的目录。我需要搜索和扫描所有子目录,并包括所有子目录:Gradle中列出与特定模式匹配的子目录的最常用方法,gradle,groovy,build.gradle,Gradle,Groovy,Build.gradle,在我的Gradle脚本中,我希望在源代码集中包含与特定模式匹配的目录。我需要搜索和扫描所有子目录,并包括所有子目录: 任何包含Java或Groovy文件的二级目录(可以深入嵌套在包文件夹结构中) 和/或具有特定名称的任何子/目录,例如api或source 问题是javasourceset下的srcDirs只接受目录而不接受文件 到目前为止,我所尝试的: def javaSourceDirs = [] project.rootDir.eachFileRecurse(FileType.DIRECTO
api
或source
javasourceset
下的srcDirs
只接受目录而不接受文件
到目前为止,我所尝试的:
def javaSourceDirs = []
project.rootDir.eachFileRecurse(FileType.DIRECTORIES) { file ->
if ((file.getName().equalsIgnoreCase("api") || file.getName().equalsIgnoreCase("sources")))
javaSourceDirs << file
}
sourceSets {
main {
java {
srcDirs = javaSourceDirs
};
}
}
def javaSourceDirs=[]
project.rootDir.eachFileRecurse(FileType.DIRECTORIES){file->
if((file.getName().equalsIgnoreCase(“api”)| | file.getName().equalsIgnoreCase(“源”))
javaSourceDirs这应该可以:
def findAllUnder = { File f, String fileOrDir, String pattern ->
def result = [ ]
def recursiveCall
switch ( fileOrDir ) {
case 'file': recursiveCall = f.&eachFileRecurse
break
case 'dir': recursiveCall = f.&eachDirRecurse
break
default: throw new RuntimeException( "Must be file or dir: $fileOrDir" )
}
recursiveCall { File path -> if ( path.name ==~ pattern ) result << path }
return result
}
def hasSources = { File f -> f.directory && findAllUnder( f, 'file', /.*\.(groovy|java)/ ) }
def sourceDirs = findAllUnder( project.rootDir, 'dir', '(?i)api|sources' ).findAll( hasSources )
def findAllUnder={File f,String filer,String pattern->
def结果=[]
def递归调用
交换机(文件管理器){
案例“文件”:recursiveCall=f.&eachFileRecurse
打破
案例“dir”:recursiveCall=f.&eachdir
打破
默认值:抛出新的运行时异常(“必须是file或dir:$fileorder”)
}
递归调用{File path->if(path.name==~pattern)结果f.directory&&findAllUnder(f,'File',/.\(groovy | java)/)}
def sourceDirs=findAllUnder(project.rootDir,'dir','(?i)api | sources').findAll(hasSources)
它将返回一个列表
,其中所有dir都与名称api
或源
(不区分大小写)相匹配,这些名称下至少有一个groovy或java文件
它不会检查嵌套的dir,因此,如果您运气不好,并且有一个dir的源代码名为groovy/api/com/api/
,那么groovy/api
和groovy/api/com/api
都将返回。这应该可以:
def findAllUnder = { File f, String fileOrDir, String pattern ->
def result = [ ]
def recursiveCall
switch ( fileOrDir ) {
case 'file': recursiveCall = f.&eachFileRecurse
break
case 'dir': recursiveCall = f.&eachDirRecurse
break
default: throw new RuntimeException( "Must be file or dir: $fileOrDir" )
}
recursiveCall { File path -> if ( path.name ==~ pattern ) result << path }
return result
}
def hasSources = { File f -> f.directory && findAllUnder( f, 'file', /.*\.(groovy|java)/ ) }
def sourceDirs = findAllUnder( project.rootDir, 'dir', '(?i)api|sources' ).findAll( hasSources )
def findAllUnder={File f,String filer,String pattern->
def结果=[]
def递归调用
交换机(文件管理器){
案例“文件”:recursiveCall=f.&eachFileRecurse
打破
案例“dir”:recursiveCall=f.&eachdir
打破
默认值:抛出新的运行时异常(“必须是file或dir:$fileorder”)
}
递归调用{File path->if(path.name==~pattern)结果f.directory&&findAllUnder(f,'File',/.\(groovy | java)/)}
def sourceDirs=findAllUnder(project.rootDir,'dir','(?i)api | sources').findAll(hasSources)
它将返回一个列表
,其中所有dir都与名称api
或源
(不区分大小写)相匹配,这些名称下至少有一个groovy或java文件
它不会检查嵌套的dir,因此如果您运气不好,并且有一个dir的源代码名为groovy/api/com/api/
,那么groovy/api
和groovy/api/com/api
都将返回