我正在使用Ant构建脚本来整理基于Eclipse的应用程序以进行分发。
构建的一个步骤是检查构建文件夹中是否存在正确的库。我目前使用Ant命令。不幸的是,每次切换到新的Eclipse构建时我都必须修改脚本(因为版本号会更新)。
我不需要检查版本号,我只需要检查文件是否存在。
那么,我该如何检查:
org.eclipse.rcp_3.5.0.*
而不是:
org.eclipse.rcp_3.5.0.v20090519-9SA0FwxFv6x089WEf-TWh11
使用Ant?
欢呼声, 伊恩
答案 0 :(得分:23)
你的意思是,(基于pathconvert task之后的this idea):
<target name="checkEclipseRcp">
<pathconvert property="foundRcp" setonempty="false" pathsep=" ">
<path>
<fileset dir="/folder/folder/eclipse"
includes="org.eclipse.rcp_3.5.0.*" />
</path>
</pathconvert>
</target>
<target name="process" depends="checkEclipseRcp" if="foundRcp">
<!-- do something -->
</target>
答案 1 :(得分:7)
使用resourcecount条件的稍微简短且更直接的方法:
<target name="checkEclipseRcp">
<condition property="foundRcp">
<resourcecount when="greater" count="0">
<fileset file="/folder/folder/eclipse/org.eclipse.rcp_3.5.0.*"/>
</resourcecount>
</condition>
</target>
<target name="process" depends="checkEclipseRcp" if="foundRcp">
<!-- do something -->
</target>
答案 2 :(得分:0)
在大多数情况下,pathconvert任务可能是首选方法。但是当目录树非常大并且使用echoproperties任务时,它会产生一些问题。使用非常大的目录树,pathconvert生成的字符串可能很大。然后echoproperties喷射巨大的字符串,使输出更难以使用。我在Linux上使用macrodef,如果目录中有文件,则创建一个设置为“1”的属性:
<macrodef name="chkDirContents" >
<attribute name="propertyName" />
<attribute name="dirPath" />
<attribute name="propertyFile" />
<sequential>
<exec executable="sh" dir="." failonerror="false" >
<arg value="-c" />
<arg value='fyles=`ls -1 @{dirPath} | head -1` ; if [ "$fyles" != "" ] ; then echo @{propertyName}=1 > @{propertyFile} ; fi' />
</exec>
</sequential>
</macrodef>
<target name="test" >
<tempfile destdir="." property="temp.file" deleteonexit="true" />
<chkDirContents propertyName="files.exist" dirPath="./target_dir" propertyFile="${temp.file}" />
<property file="${temp.file}" />
<echoproperties/>
</target>
如果./target_dir/目录中有文件,执行“test”目标将生成以下echoproperties行:
[echoproperties] files.exist=1
“测试”的作用: 它会生成一个临时文件名$ {temp.file},以后可以用作属性文件。 然后执行macrodef,调用shell来检查dirPath目录的内容。如果dirPath中有任何文件或目录,则会在临时文件中为propertyName属性指定值1。然后它读取文件并设置文件中给出的属性。如果文件为空,则不定义任何属性。
请注意,如果需要,临时文件可以重复用于后续调用macrodef。另一方面,当然,一旦设置了属性,它就是不可变的。