我有一个SVN外部文件夹,其中包含许多文件夹称为*Plugin
然后在这些文件夹中有modules
文件夹和binaries
文件夹。Nant文件集basedir与模式
对我来说,问题是,在我的构建任务中,我想从模块复制**/*
到我的项目中的某个位置,以及从二进制文件位置到项目中其他任何位置的任何*.plugin.dll
。
因此,这里是一个虚拟的例子:
- DummyPlugin1
|- binaries
|- some.assembly.dll
|- some.plugin.dll
|- modules
|- some-named-folder
|- some-sub-folder
|- some.content.xml
|- some-other-sub-folder
|- yet-another-folder
|- some.more.content.jpg
- DummyPlugin2
|- binaries
|- some.other.plugin.dll
|- modules
|- another-named-folder
|- content.xml
|- image.jpg
|- yet-another-named-folder
|- some-web-page.html
因此,在这个例子中,我想基本上复制:
- some.plugin.dll
- some.other.plugin.dll
对于给定的输出目录,然后从模块目录我想要采取:
- 一些命名的文件夹(和所有内容)
- 另一个命名文件夹(和所有内容)
- 尚未另一个命名文件夹(和所有内容)
并将所有这些放在另一个给定的输出目录中。
我试图做到这一点:
<copy todir="${dir.projects.dynamic.binaries}">
<fileset basedir="${dir.plugins}/**/binaries">
<include name="*.plugin.dll" />
</fileset>
</copy>
<copy todir="${dir.projects.dynamic.modules}">
<fileset basedir="${dir.plugins}/**/modules">
<include name="**/*" />
</fileset>
</copy>
不过,我不断收到错误,告诉我的文件集BASEDIR不能包含**或任何其他无效符号。该文档似乎有点模糊,如果你可以或不可以在你的文件集basedir或不使用模式,但我假设在这个错误之后,我不能。
的问题是,如果我是这样做,而不是这样:
<copy todir="${dir.projects.dynamic.binaries}">
<fileset basedir="${dir.plugins}">
<include name="**/binaries/*.plugin.dll" />
</fileset>
</copy>
<copy todir="${dir.projects.dynamic.modules}">
<fileset basedir="${dir.plugins}">
<include name="**/modules/**/*" />
</fileset>
</copy>
但是它复制父文件夹,即DummyPlugin1/binaries/some.assembly.dll
,DummyPlugin2/binaries/some.other.plugin.dll
而不仅仅是我想要的DLL。与模块相同...
我知道我可以更改basedir来包含DummyPlugin1/binaries,DummyPlugin2/binaries,但我不知道有多少个文件夹将会在那里,或者他们的名字将会是什么,而不会不断改变构建脚本,所以我宁愿保持它的动态性,以便只是为我提供任何插件和模块,而不必为每个插件文件夹制作可能或不可能存在的副本。
那么我有什么办法让我的蛋糕在这里吃吗?
问题是我需要保持文件夹结构从模块目录完整之内。正如我在那里复制一个根文件夹和所有内容不只是一组文件。 – Grofit 2012-01-29 13:56:40
也许用NAnt'foreach'生成单独的文件集会更适合吗?首先获取目录的文件集,然后遍历它。 – skolima 2012-01-29 21:27:30
您是否有示例或链接可以说明这种工作方式,Nant文档现在有点稀疏。我打算使用Rake,但并不想要安装ruby和rake的依赖。 – Grofit 2012-01-30 09:29:51