주어진 파일이 존재하는 경우에만 블록을 실행하는 ANT 작업이 있습니까? 특정 구성 파일이있는 경우에만 특수 처리를 수행 해야하는 일반 개미 스크립트가 있다는 문제가 있습니다.
답변
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>
<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>
답변
이것은 코딩 관점에서 조금 더 의미가있을 수 있습니다 (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에서
이 예제가 일부 사람들에게 유용하기를 바랍니다. 그들은 자원을 사용하지 않지만 아마도 당신은 할 수 있습니까? …..
답변
나는이 비슷한 대답을 참조 할 가치가 있다고 생각합니다 : 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>
답변
필요한 이름과 이름이 같은 파일 목록을 사용하여 작업을 수행하도록 명령하여 수행 할 수 있습니다. 특별한 대상을 만드는 것보다 훨씬 쉽고 직접적입니다. 추가 도구가 필요 없으며 순수한 Ant 만 있습니다.
<delete>
<fileset includes="name or names of file or files you need to delete"/>
</delete>
FileSet을 참조하십시오 .