如何使用Ant验证当前工作目录是否位于特定路径下(任意深度嵌套)?例如,我只想在当前目录是/some/dir/
的一部分时执行目标,例如,如果在目录/some/dir/to/my/project/
中执行了Ant。
我能想到的最好的是String包含条件:
<if>
<contains string="${basedir}" substring="/some/dir/"/>
<then>
<echo>Execute!</echo>
</then>
<else>
<echo>Skip.</echo>
</else>
</if>
这适用于我目前的目的,但我担心它可能会在将来中断一段时间...例如,在路径/not/some/dir/
中执行构建时,它也包含指定的目录字符串。
是否有更强大的解决方案,例如startsWith
比较,或者更好的基于文件系统的检查......?
答案 0 :(得分:1)
本机Ant中没有特定的startswith
条件,但有matches
条件采用正则表达式。
作为旁注,大多数构建脚本很少需要ant-contrib,并且通常会导致代码不可靠。我强烈建议避免它。
这是一个示例脚本,用于说明如何将matches
条件与本机Ant一起使用。当然,test
目标仅用于演示。
<property name="pattern" value="^/some/dir" />
<target name="init">
<condition property="basedir.starts.with">
<matches pattern="${pattern}" string="${basedir}" />
</condition>
</target>
<target name="execute" depends="init" if="basedir.starts.with">
<echo message="Executing" />
</target>
<target name="test">
<condition property="dir1.starts.with">
<matches pattern="${pattern}" string="/some/dir/" />
</condition>
<condition property="dir2.starts.with">
<matches pattern="${pattern}" string="/some/dir/to/my/project/" />
</condition>
<condition property="dir3.starts.with">
<matches pattern="${pattern}" string="/not/some/dir/" />
</condition>
<echo message="${dir1.starts.with}" />
<echo message="${dir2.starts.with}" />
<echo message="${dir3.starts.with}" />
</target>