我正在开发一个Jenkins定制插件,我需要列出所有有效的FilePath:子目录和子文件,不包括像.git,.npm,.cache etc这样的一些临时文件,完整的列表包含在以下代码示例中:

String excludes = "node_modules/**/*,**/node_modules/**/*,.git/**,.npm*/**,**/.npm*/**,**/.nvm*/**,**/cronus/**,**/.cache/**,**/npmtmp/**,**/.tmp/**";
FilePath[] validFileAndFolderPaths = workspace.list("**/*", excludes);

上面的代码给了我workspace个FilePath中的所有文件,但没有给出子目录.

有一种列出所有子目录hudson.FilePath#listDirectories的方法,但该方法不支持排除列表. 对如何达到这一要求有什么帮助吗?

推荐答案

不能将hudson.FilePath#listDirectories与排除/包含模式一起使用.因此,您必须实现自己的方法来获取支持Ant模式匹配的目录.以下是示例代码.

Dependency

<dependency>
  <groupId>org.apache.ant</groupId>
  <artifactId>ant</artifactId>
</dependency>

Java Code

private String [] getDirectories(String baseDir, String excludes) {

    DirSet ds = new DirSet();
    ds.setDir(new File(baseDir));
    for (String token : excludes.split(",")) {
        ds.createExclude().setName(token);
    }
    DirectoryScanner scanner = ds.getDirectoryScanner(new Project());
    String[] directories = scanner.getIncludedDirectories();

    return directories;
}

Calling the method

String excludes = "node_modules/**/*,**/node_modules/**/*,.git/**,.npm*/**,**/.npm*/**,**/.nvm*/**,**/cronus/**,**/.cache/**,**/npmtmp/**,**/.tmp/**";
String dir = "/SOME/DIR";
String[] directories = getDirectories(dir, excludes);

Java相关问答推荐

是否可以从@ TrustMapping中删除特定方法的基路径?

Java 21虚拟线程会解决转向react 式单线程框架的主要原因吗?

使用Java Streams API比较两个不同的Java集合对象和一个公共属性

JVM会优化这个数学运算吗?

如何使用AWS CLI从S3存储桶中的所有对象中删除用户定义的元数据?

Spring和可编辑";where";@Query

有没有更快的方法在N个容器中删除重复项?

搜索列表返回多个频道

WebSockets和Spring Boot安全性出现错误401

使用存储在字符串变量中的路径目录打开.pdf文件

如何将Pane的图像快照保存为BMP?

如何在不删除Java中已有内容的情况下覆盖文件内容?

有没有可能在时间范围内得到多种解决方案?

如何在Spring Boot中创建可以将值传递给配置的&Enable&Quot;注释?

持续时间--为什么在秒为负数的情况下还要做额外的工作?

如何使用Java ZoneID的区域设置?

在Spring Boot中使用咖啡因进行缓存

无泄漏函数的Java DRY

睡眠在 Spring Boot 中

如何使用 Java 替换位于特定标记内的 XML 标记的 CDATA 内的值