문제

다음을 사용하여 복사 작업을 수행하는 Ant 스크립트가 있습니다. '복사' 작업.이는 Windows용으로 작성되었으며 'todir' 인수로 하드코딩된 C:\ 경로를 갖습니다.'exec' 작업에 OS 인수가 있는 것을 확인했습니다. OS를 기반으로 복사본을 분기하는 비슷한 방법이 있습니까?

도움이 되었습니까?

해결책

속성에 경로를 입력한 다음 현재 OS에 따라 조건부로 속성을 설정하는 것이 좋습니다.

<condition property="foo.path" value="C:\Foo\Dir">
   <os family="windows"/>
</condition>
<condition property="foo.path" value="/home/foo/dir">
   <os family="unix"/>
</condition>

<fail unless="foo.path">No foo.path set for this OS!</fail>

부가적인 이점으로 일단 속성에 포함되면 Ant 스크립트를 편집하지 않고도 이를 재정의할 수 있습니다.

다른 팁

이전에 게시된 OS별 변수 제안은 작동하지만 "C:" 접두사를 생략하고 슬래시(Unix 스타일) 파일 경로를 사용하면 Windows와 Unix 시스템 모두에서 작동하는 경우가 많습니다.

따라서 Windows에서는 "C:/tmp"로, Unix에서는 "/tmp"로 파일을 복사하려면 다음과 같이 사용할 수 있습니다.

<copy todir="/tmp" overwrite="true" >
         <fileset dir="${lib.dir}">
             <include name="*.jar" />
         </fileset>
</copy>

OS를 기반으로 조건부 경로를 설정하고 싶거나 설정해야 하는 경우 다음과 같이 단순화할 수 있습니다.

    <condition property="root.drive" value="C:/" else="/">
        <os family="windows" />
    </condition>
    <copy todir="${root.drive}tmp" overwrite="true" >
             <fileset dir="${lib.dir}">
                 <include name="*.jar" />
             </fileset>
    </copy>

조건 작업을 사용하여 다른 복사 작업으로 분기할 수 있습니다.개미 매뉴얼에서 :

<condition property="isMacOsButNotMacOsX">
<and>
  <os family="mac"/>

  <not>
    <os family="unix"/>

  </not>
</and>

작업의 루트 폴더인 변수를 선언합니다.복사 작업을 포함하여 폴더 앞에 해당 변수를 붙입니다.

조건을 사용하여 OS에 따라 변수를 설정하거나 이를 Ant 스크립트에 인수로 전달합니다.

변수를 사용하고 유형에 따라 할당할 수는 없나요?당신은 그것을 넣을 수 있습니다 build.properties 파일.또는 다음을 사용하여 할당할 수도 있습니다. 상태.

Ant-contrib에는 <osfamily /> 작업이 있습니다.이렇게 하면 OS 계열이 (이름을 지정하는) 속성에 노출됩니다.이것은 어느 정도 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top