2010-07-20 92 views
1

我从我的蚂蚁生成文件得到一个非常混淆的反应,我想知道我是否不够聪明,或者这可能实际上是一个错误。蚂蚁文件扩展不起作用

我已经得到了以下属性在我的项目全局设置:

<property name="lib.dir" location="lib"/> 

然后我会尝试添加一些文件从这个目录到文件集通过一个jar文件(超过一个资源):

<fileset dir="${basedir}" includes="lib/*filename*"/> 

应该有(和存在)3个不同的库,这是匹配的方式。但是,如果我尝试使用以下,这是行不通的,并没有文件包括:

<fileset dir="${basedir}" includes="${lib.dir}/*filename*"/> 

需要注意的是,唯一的区别在于全局属性的使用。现在有一个简单的问题:为什么第一个版本像广告一样工作,但第二个版本没有?

+0

我建议使用'-verbose'或'-debug'运行Ant并检查任务周围的输出。 Ant会在评估时告诉你它正在检查的文件以及添加到文件集中的'lib.dir'的值。 – 2010-07-20 14:59:46

+0

我试图用-debug运行ant,并且发现这条线,这里是相关的: fileset:设置扫描仪在dir [pathToDir]与patternSet {includes:[[pathToDir]/lib/* glpkjni *]不包括:这意味着,它应该像宣传的那样工作... – 2010-07-20 15:10:25

回答

2

请在使用“文件集”表达式的任务之前和之后检查“lib.dir”的实际值。只是为了确保它在全球范围内设置后并未发生意外更改。 <echo/>任务可以提供帮助。


也许我得到了解决方案。 location属性的描述是:

将属性设置为给定文件的绝对文件名。如果此属性的值为绝对路径,则保持不变(将/和\字符转换为当前平台约定)。否则,它被视为相对于项目的basedir并扩展的路径。

只需使用value属性而不是location。这是一个测试脚本,以示区别:

我的系统上的输出如下:

Buildfile: D:\Develop\workspace-jabber\scrapbook\build.xml 
target: 
    [echo] D:\Develop\workspace-jabber\scrapbook\lib 
    [echo] lib 
BUILD SUCCESSFUL 
Total time: 307 milliseconds 
+0

我在jar tast之前添加了以下回显任务: 输出是: [回波] DEBUG:文件集包括为:[pathToDir]/lib中/ * glpkjni * 应建议,即至少所述特性评价应该实际工作。 .. – 2010-07-20 15:12:08

0

在创建属性(?是做全球或目标),请问目录lib是否存在?如果不是,则location属性不起作用 - 请改用value属性,或者在创建目录后更好地定义属性。

+0

的lib目录已经存在 – 2010-07-20 15:15:51

1

我发现了答案的线索,但还没有找到答案。

我用ant-debug运行了两个版本的文件集,这里发生了什么。

在工作,未使用属性的版本,我得到下面的输出:

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [lib/*filename*] excludes: [] } 

而在应该待的工作,但是,doesn't版本,我得到:

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [ [pathToDir]/lib/*filename*] excludes: [] }

正如你可以看到,蚂蚁附加的的[pathToDir]在正则表达式,从而寻找

[pathToDir]/[pathToDir]/lib/*filename* 

这显然不存在。现在的问题:我如何修改我的版本以使其正常工作?

0

如上所述,问题是$ {lib.dir}也包含整个路径,因此搜索[pathToDir]/[pathToDir]/lib/文件名

要删除$ {lib.dir}属性中不需要的[pathToDir],我现在使用了该任务。我现在以下,但恕我直言没有这么好看的解决方案:

<basename property="lib.dir.rel" file="${lib.dir}"/> 
<fileset dir="${basedir}" includes="${lib.dir.rel}/*filename*"/> 

PS:在第二次看,我发现Andreas_D也找到了合适的理由和良好的建议,昨天,我必须忽略: -/