首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache :用通配符解析路径到FileSet

Apache :用通配符解析路径到FileSet
EN

Stack Overflow用户
提问于 2018-11-28 19:22:59
回答 1查看 271关注 0票数 0

给定包含通配符(如C:\Program Files\VC\Redist\x64\Microsoft.*.CRT\*.dll )的绝对路径,如何将此路径解析为FileSet

假设路径存储在属性myPath中,该属性由用户提供,可能包含空格,并且可能位于文件系统的任何位置。我需要一些类似以下内容的东西:

代码语言:javascript
复制
<fileset>
  <include name="${myPath}" />
</fileset>

当然,这是不起作用的,因为fileset需要dir参数-但是,我没有可以提供的基本dir。这怎么能解决呢?

可用的ant版本为1.10.5。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 22:30:03

通过使用正则表达式将绝对路径分解为基本路径部分和包含通配符的部分,我解决了这个问题。可用宏:

代码语言:javascript
复制
<macrodef name="resolveWildcardPath">
    <!-- resolves a wildcard path to a fileset -->
    <attribute name="path" /> <!-- input path -->
    <attribute name="filesetID" /> <!-- output fileset ID -->
    <sequential>
        <local name="normalizedPath" />
        <local name="basePath" />
        <local name="wildcardPath" />
        <pathconvert property="normalizedPath">
            <path location="@{path}" />
        </pathconvert>
        <regexp id="pathWildcardRegex" pattern="([^\*]+)\${file.separator}([^\${file.separator}]*\*.*)" />
        <propertyregex input="${normalizedPath}" select="\1" property="basePath">
            <regexp refid="pathWildcardRegex"/>
        </propertyregex>
        <propertyregex input="${normalizedPath}" select="\2" property="wildcardPath">
            <regexp refid="pathWildcardRegex"/>
        </propertyregex>
        <fileset id="@{filesetID}" dir="${basePath}" if:set="wildcardPath">
            <include name="${wildcardPath}" />
        </fileset>
        <fileset id="@{filesetID}" file="${normalizedPath}" unless:set="wildcardPath" />
    </sequential>
</macrodef>

请注意,此解决方案还需要antcont肋骨和if/unless (xmlns:if="ant:if" xmlns:unless="ant:unless"作为project参数)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53526663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档