如何无需指定文件名/扩展名排除src/main/resources下所有文件?
直接排除整个src/main/resources目录的解决方案
当然可以!你完全不用逐个指定文件名或扩展名,就能一次性排除src/main/resources目录下的所有文件。这里有两种简洁可靠的方式实现:
方式一:直接移除资源目录的映射集合(推荐)
这种方法利用sbt内置的资源映射,直接将packageBin任务中的资源映射全部移除,代码最简洁直观:
mappings in (Compile, packageBin) --= (mappings in (Compile, resources)).value
原理很简单:(mappings in (Compile, resources)).value就是src/main/resources目录下所有文件对应的映射集合,用--=操作符直接从打包映射中剔除整个集合即可,完全不用关心目录里的文件类型。
方式二:通过路径过滤排除
如果你需要更灵活的路径判断(比如后续要调整排除的子目录),可以用路径匹配的方式过滤:
mappings in (Compile, packageBin) ~= { mappings => val resourceDir = (resourceDirectory in Compile).value.getAbsolutePath mappings.filterNot { case (file, _) => file.getAbsolutePath.startsWith(resourceDir) } }
这段代码会检查每个待打包文件的绝对路径是否以src/main/resources的路径开头,符合条件的文件就会被过滤掉。
对比你之前逐个排除.conf文件的方式,这两种方法都能一次性处理整个资源目录的所有文件,彻底解决逐个排除的繁琐问题。
内容的提问来源于stack exchange,提问作者Some Name
相关产品推荐
相关产品推荐

