gpt4 book ai didi

gradle - Gradle中最时髦的方式来列出与特定模式匹配的子目录

转载 作者:行者123 更新时间:2023-12-03 04:30:35 27 4
gpt4 key购买 nike

在我的Gradle脚本中,我想在我的源集中包含与特定模式匹配的目录。我需要搜索和扫描所有子目录,并包括所有子目录:

  • 其中包含Java或Groovy文件的任何第二级目录(可以深入嵌套在package文件夹结构内)。
  • 和/或具有特定名称的任何子目录/目录,例如apisource

  • 问题是 srcDirs下的 java sourceSet仅接受目录,而不接受文件。

    到目前为止,我已经尝试过:
    def javaSourceDirs = []
    project.rootDir.eachFileRecurse(FileType.DIRECTORIES) { file ->
    if ((file.getName().equalsIgnoreCase("api") || file.getName().equalsIgnoreCase("sources")))
    javaSourceDirs << file
    }
    sourceSets {
    main {
    java {
    srcDirs = javaSourceDirs
    };
    }
    }

    只想知道使用 fileTree或类似方法是否有更好/更清洁的方法?

    最佳答案

    这应该工作:

    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 )

    它将返回一个 List<File>,其所有目录都与名称 apisources(不区分大小写)匹配,且目录下至少有一个groovy或java文件。

    它不会检查嵌套的目录,因此,如果您很不幸并且有一个包含名为 groovy/api/com/api/的源的目录,则将同时返回 groovy/apigroovy/api/com/api

    关于gradle - Gradle中最时髦的方式来列出与特定模式匹配的子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39355125/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com