[file] 파일이 존재하는 경우에만 Ant 대상을 실행하는 Ant 태스크?

주어진 파일이 존재하는 경우에만 블록을 실행하는 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을 참조하십시오 .


답변