Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant文件集扩展不支持';行不通_Ant_Properties_Fileset - Fatal编程技术网

Ant文件集扩展不支持';行不通

Ant文件集扩展不支持';行不通,ant,properties,fileset,Ant,Properties,Fileset,我从我的ant构建文件中得到了一个非常混乱的反应,我想知道我是否不够聪明,或者这实际上可能是一个bug 我在项目中全局设置了以下属性: <property name="lib.dir" location="lib"/> 然后,我将尝试通过文件集(多个资源)将此目录中的一些文件添加到jar文件中: 应该有(并且存在)3个不同的库,它们以这种方式匹配。但是,如果我尝试使用以下内容,它将不起作用,并且不包含任何文件: <fileset dir="${basedir}" in

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

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

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

然后,我将尝试通过文件集(多个资源)将此目录中的一些文件添加到jar文件中:


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

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


请注意,唯一的区别在于全局属性的用法。现在有一个简单的问题:为什么第一个版本能像广告中所说的那样工作,而第二个版本不能?

请在使用“fileset”表达式的任务之前或之后检查“lib.dir”的实际值。只是为了确保在全局设置后不会意外更改它。
任务会有所帮助


也许我找到了解决办法。
位置
属性的描述如下:

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

只需使用
属性,而不是
位置
。下面是一个测试脚本来显示差异:

<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>

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

我找到了答案的线索,但还不是全部

我使用ant-debug运行了两个版本的文件集,下面是所发生的情况

在working(不使用属性)版本中,我得到以下输出:

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [lib/*filename*] excludes: [] }
而在中,应该可以正常工作,但我得到的版本不是:

文件集:使用模式集{includes:[[pathToDir]/lib/*filename*]排除:[]}在dir[pathToDir]中设置扫描程序

如您所见,ant在regexp中添加了[pathToDir],从而搜索

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

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

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

为了去掉${lib.dir}属性中不需要的[pathToDir],我现在使用了这个任务。我现在得到了以下解决方案,但不是很好看:

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


附言:再看一眼,我发现安德烈亚斯昨天也找到了正确的理由和一个很好的建议,我一定忽略了:-/

我建议用
-verbose
-debug
运行Ant,并检查任务的输出。Ant将准确地告诉您它正在检查哪些文件以添加到您的文件集,以及评估时
lib.dir
的值。我尝试使用-debug运行Ant,发现这行代码与此相关:fileset:Setup scanner in dir[pathToDir]with patternSet{includes:[[pathToDir]/lib/*glpkjni*]excludes:[]}这表明,它应该像广告中所说的那样工作……我在jar tast之前添加了以下echo任务:输出是:[echo]DEBUG:Fileset includes:[pathToDir]/lib/*glpkjni*,这应该表明,至少属性评估应该实际工作。。。
[pathToDir]/[pathToDir]/lib/*filename*
<basename property="lib.dir.rel" file="${lib.dir}"/>
<fileset dir="${basedir}" includes="${lib.dir.rel}/*filename*"/>