java – Ant从(绝对)属性创建文件集,dirsets
发布时间:2020-12-15 08:38:24 所属栏目:Java 来源:网络整理
导读:在ant中,我定义了一些属性来定义构建系统中所需的一些路径(绝对). 大多数ant任务都需要文件集,因此要从属性构建文件集,我必须这样做: fileset dir="" includes="${myprop}"/ 问题是myprop是绝对的,我应该省略dir属性(这是不可能的),所以有没有办法定义(绝对
在ant中,我定义了一些属性来定义构建系统中所需的一些路径(绝对).
大多数ant任务都需要文件集,因此要从属性构建文件集,我必须这样做: <fileset dir="" includes="${myprop}"/> 问题是myprop是绝对的,我应该省略dir属性(这是不可能的),所以有没有办法定义(绝对)属性并有效地使用它们来创建文件集,dirsets等..或者在蚂蚁是这个不好的做法(只应使用相对路径)? 谢谢. 解决方法
关于Ant的绝对与相对没有特别的规则.如果可能,您应该避免对绝对路径进行硬编码 – 以使您的构建更加便携.如果必须对构建的某些部分使用绝对路径,请尝试构建它们 – 例如从项目的${basedir}构建它们 – 以便更容易进行更改.
将绝对路径转换为相对路径以在文件集等中使用可能有用的两件事: > 例子: <!-- Absolute paths --> <property name="myprop" value="${basedir}/x" /> <property name="myprop2" value="${basedir}/x:${basedir}/y" /> <!-- Convert single path to relative to basedir --> <property name="myprop_rel" location="${myprop}" relative="yes"/> <!-- Go via path/pathconvert for the property with multiple paths --> <path id="mypath2" path="${myprop2}" /> <pathconvert property="myprop2_rel" refid="mypath2" pathsep=","> <map from="${basedir}/" to="" /> </pathconvert> <fileset id="my_fileset" dir="." includes="${myprop2_rel}" /> 回应评论:我不知道在Ant中获取文件集的最长公共前缀目录的简单方法, <macrodef name="common-prefix-dir"> <attribute name="refid" /> <attribute name="outputproperty" /> <sequential> <script language="javascript"><![CDATA[ srcFiles = project.getReference( "@{refid}" ) .getDirectoryScanner( project ) .getIncludedFiles( ); if ( srcFiles.length > 0 ) { prefix = "" + srcFiles[0]; for ( i = 0; i < srcFiles.length; i++ ) { while ( prefix.length && srcFiles[i].substr( 0,prefix.length ) != prefix ) { prefix = prefix.substr( 0,prefix.length - 1); } if ( !prefix.length ) { break; } } } else { prefix = ""; } prefix = prefix.substring( 0,prefix.lastIndexOf( '/' ) ); project.setProperty( "@{outputproperty}",prefix ); ]]></script> </sequential> </macrodef> (这来自php implementation.) 你可以试试看: <property name="my.dir" location="...your dir here..." /> <fileset id="my.fs" dir="${my.dir}"> <!-- define fileset here --> </fileset> <echo message="Input fileset is: '${toString:my.fs}'" /> <common-prefix-dir refid="my.fs" outputproperty="prefix" /> <echo message="Longest common prefix is: '${prefix}'" /> pathconvert任务现在可用于创建收缩包装文件集: <pathconvert property="shrink" refid="my.fs" pathsep=","> <map from="${my.dir}/${prefix}/" to="" /> </pathconvert> <fileset id="my.fs.out" dir="${my.dir}/${prefix}" includes="${shrink}" /> <echo message="Shrink-wrapped fileset is: '${toString:my.fs.out}'" /> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |