2008-09-17 3 views
19

'copy' task을 사용하여 복사 작업을 수행하는 Ant 스크립트가 있습니다. Windows 용으로 작성되었으며 'todir'인수로 하드 코드 된 C : \ 경로가 있습니다. 'exec'작업에 OS 인수가 있다는 것을 알 수 있습니다. OS 기반 사본을 분기하는 것과 비슷한 방법이 있습니까?Ant 복사 작업을 OS에 맞게 만들 수 있습니까?

답변

31

속성에 경로를 넣은 다음 조건에 따라 현재 OS를 기준으로 속성을 설정하는 것이 좋습니다.

부작용으로, 일단 속성에 있으면 Ant 스크립트를 편집하지 않고 무시할 수 있습니다.

+0

Windows와 Linux에서 똑같이 처리되는 Ant에서 경로를 선언하는 방법이 없습니까? 나는 단지 궁금하다. –

1

변수를 사용할 수없고 유형에 따라 할당 할 수 없습니까? build.properties 파일에 넣을 수 있습니다. 또는 condition을 사용하여 지정할 수 있습니다.

2

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

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

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

    </not> 
</and> 

1

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

조건부를 사용하여 OS를 기반으로 변수를 설정하거나 Ant 스크립트에 인수로 전달하십시오.

6

이전에 게시 된 OS 별 변수 제안이 효과적 일 수 있지만 여러 번 "C :"접두사를 생략하고 슬래시 (유닉스 스타일) 파일 경로를 사용하면 Windows 및 Unix 시스템에서 모두 작동합니다. 유닉스의 Windows에와 "/ tmp에"당신과 같이 사용할 수 있습니다 : 당신이 "/ tmp를 C는"파일을 복사 할 경우

그래서,

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

을 당신은/설정해야 할 경우

<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> 
0

개미의 contrib는 < osfamily/> 작업을 가지고로서 OS에 기초하여 조건부로, 그것은 단순화 될 수있다. 그러면 os의 패밀리가 (이름을 지정하는) 속성에 노출됩니다. 이것은 약간의 유익이 될 수 있습니다.

관련 문제