답변:
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>
<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>
if
및 unless
속성은 첨부 된 대상 만 활성화 또는 비활성화합니다. 즉, 대상의 종속성이 항상 실행됩니다. 그렇지 않으면 확인하려는 속성을 설정하는 대상에 의존하지 않습니다.
<Available>
더 이상 사용되지 않는 것 같습니다 . 나는 이것을 사용했다 : <target name="do-if-abc" if="${file::exists('abc.txt')}"> ... </target>
확인 : nant.sourceforge.net/release/0.85/help/functions/…
<available>
더 이상 사용되지 않는 곳 은 어디 입니까? 2 : ${file::existst...}
Ant와 작동하지 않는 것 같습니다 (Apache ANT 1.9.7)
이것은 코딩 관점에서 조금 더 의미가있을 수 있습니다 (ant-contrib : http://ant-contrib.sourceforge.net/ ) :
<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>
Ant 1.8.0 이후로 분명히 리소스도 존재합니다.
에서 http://ant.apache.org/manual/Tasks/conditions.html
자원이 존재하는지 테스트합니다. Ant 1.8.0 이후
테스트 할 실제 자원은 중첩 요소로 지정됩니다.
예를 들면 :
<resourceexists> <file file="${file}"/> </resourceexists>
나는이 질문에 대한 위의 좋은 대답에서 예를 재 작업 한 것이었고 이것을 찾았습니다.
Ant 1.8.0부터는 속성 확장을 대신 사용할 수 있습니다. 값이 true (또는 on 또는 yes)이면 항목이 활성화되고 false (또는 off 또는 no)이면 항목이 비활성화됩니다. 다른 값은 여전히 속성 이름으로 간주되므로 명명 된 속성이 정의 된 경우에만 항목이 활성화됩니다.
이전 스타일과 비교하면 명령 줄 또는 부모 스크립트에서 조건을 무시할 수 있기 때문에 유연성이 추가됩니다.
<target name="-check-use-file" unless="file.exists"> <available property="file.exists" file="some-file"/> </target> <target name="use-file" depends="-check-use-file" if="${file.exists}"> <!-- do something requiring that file... --> </target> <target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/>
개미 매뉴얼 http://ant.apache.org/manual/properties.html#if+unless에서
이 예제가 일부 사람들에게 유용하기를 바랍니다. 그들은 자원을 사용하지 않지만 아마도 당신은 할 수 있습니까? .....
if="${file.exists}"
로 교체해야합니다 if="file.exists"
으로 if
하고 unless
, 이름없는 그것의 가치를 재산의 존재를 확인한다.
나는이 비슷한 대답을 참조 할 가치가 있다고 생각합니다 : https://stackoverflow.com/a/5288804/64313
또 다른 빠른 해결책이 있습니다. <available>
태그를 사용하여 다른 변형이 가능합니다 .
# exit with failure if no files are found
<property name="file" value="${some.path}/some.txt" />
<fail message="FILE NOT FOUND: ${file}">
<condition><not>
<available file="${file}" />
</not></condition>
</fail>
DB_*/**/*.sql
다음은 하나 이상의 파일이 와일드 카드 필터에 해당하는 경우 작업을 수행하는 변형입니다. 즉, 파일의 정확한 이름을 모릅니다.
여기서는 " DB_ * " 라는 서브 디렉토리에서 " * .sql "파일을 재귀 적으로 찾고 있습니다. 필요에 따라 필터를 조정할 수 있습니다.
NB : Apache Ant 1.7 이상!
일치하는 파일이있는 경우 속성을 설정하는 대상은 다음과 같습니다.
<target name="check_for_sql_files">
<condition property="sql_to_deploy">
<resourcecount when="greater" count="0">
<fileset dir="." includes="DB_*/**/*.sql"/>
</resourcecount>
</condition>
</target>
파일이 존재하는 경우에만 실행되는 "조건부"대상은 다음과 같습니다.
<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
<!-- Do stuff here -->
</target>