development

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

big-blog 2020. 6. 11. 07:41
반응형

파일이 존재하는 경우에만 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 : //.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>

Check Using Filename filters like DB_*/**/*.sql

Here is a variation to perform an action if one or more files exist corresponding to a wildcard filter. That is, you don't know the exact name of the file.

Here, we are looking for "*.sql" files in any sub-directories called "DB_*", recursively. You can adjust the filter to your needs.

NB: Apache Ant 1.7 and higher!

Here is the target to set a property if matching files exist:

<target name="check_for_sql_files">
    <condition property="sql_to_deploy">
        <resourcecount when="greater" count="0">
            <fileset dir="." includes="DB_*/**/*.sql"/>
        </resourcecount>
    </condition>
</target>

Here is a "conditional" target that only runs if files exist:

<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
    <!-- Do stuff here -->
</target>

You can do it by ordering to do the operation with a list of files with names equal to the name(s) you need. It is much easier and direct than to create a special target. And you needn't any additional tools, just pure Ant.

<delete>
    <fileset includes="name or names of file or files you need to delete"/>
</delete>

See: FileSet.

참고URL : https://stackoverflow.com/questions/520546/ant-task-to-run-an-ant-target-only-if-a-file-exists

반응형