你可以在不使用ant-contrib的foreach的情况下做这个看似简单的Ant复制任务吗?

Jeo*_*lks 3 ant copy wildcard

我有一个带有一堆插件的源目录.每个插件都有自己的lib目录.我希望将每个lib目录的内容合并到lib我的构建中的单个目录中.理论上你会做这样的事情:

<copy todir="build/web/lib">
    <fileset dir="web/plugins/*/lib/" includes="**/*" />
</copy>
Run Code Online (Sandbox Code Playgroud)

但是,当dir属性包含通配符时,Ant会阻塞.ant-contrib是唯一的选择吗,或者你可以用香草蚂蚁做这个吗?

扼流圈的消息是 build.xml:28: [...]/web/plugins/*/lib does not exist.

mar*_*ton 5

dir=文件集的属性不带通配符 - 因此您看到的错误.在这种情况下web/plugins,您需要指定一个目录,并为包含使用略微不同的通配符:

<copy todir="build/web/lib">
    <fileset dir="web/plugins" includes="*/lib/**/*" />
</copy>
Run Code Online (Sandbox Code Playgroud)

如果您在复制时需要更改路径,则可以使用映射器,例如,flattenmapper将为您提供文件名,其中删除了所有前导目录信息.

  • 一个正则表达式映射器也许值得一看,例如:`<regexpmapper from =".*/lib /(.*)"to ="\ 1"processedirsep ="true"/>` (2认同)