Ant文件集扩展不起作用

时间:2010-07-20 14:42:46

标签: ant properties fileset

我从我的ant构建文件中得到了一个非常混乱的反应,我想知道我是不是很聪明,或者这实际上可能是一个错误。

我的项目中全局设置了以下属性:

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

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

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

应该存在(并且存在)3个不同的库,这些库以这种方式匹配。但是,如果我尝试使用以下内容,它将不起作用,并且不包含任何文件:

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

请注意,唯一的区别在于全局属性的使用。现在这个简单的问题:为什么第一个版本的工作方式与宣传的一样,但第二个版本没有?

4 个答案:

答案 0 :(得分:2)

请在使用“fileset”表达式的任务之前和之后检查“lib.dir”的实际值。只是为了确保在全局设置之后它没有被意外更改。 <echo/>任务可以提供帮助。


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

  

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

只需使用value属性而不是location。这是一个显示差异的测试脚本:

<project name="test">

    <property name="test1" location="lib"></property>
    <property name="test2" value="lib"></property>

    <target name="target" description="description">
       <echo>${test1}</echo>
       <echo>${test2}</echo>
    </target>

</project>

我系统的输出如下:

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

答案 1 :(得分:1)

我找到了答案的线索,但不是整件事。

我使用ant -debug运行了文件集的两个版本,这就是发生的事情。

在work,not-using-property版本中,我得到以下输出:

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

而在应该工作但没有版本我得到:

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

如你所见,ant在正则表达式中添加[pathToDir],从而搜索

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

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

答案 2 :(得分:0)

创建属性时(是全局还是目标?),目录lib是否存在?如果没有,则location属性不起作用 - 改为使用value属性,或者在创建目录后更好地定义属性。

答案 3 :(得分:0)

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

要剪切$ {lib.dir}属性中不需要的[pathToDir],我现在使用了该任务。我现在得到以下内容,但imho不是那么好看的解决方案:

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

P.S。:再看看,我发现Andreas_D昨天也找到了正确的理由和一个好的建议,我一定忽略了这一点: - /