2010-06-16 7 views
15

내 모든 프로젝트와 해당 버전이 속성에 정의되어 다음과 같이 파일 :파일에서 속성을 반복하는 방법은 무엇입니까?

ProjectNameA=0.0.1 
ProjectNameB=1.4.2 

내가 이상 모든 프로젝트를 반복하고, Ant 스크립트에서 자신의 이름과 버전을 사용하고 싶습니다. 나는에서 프로젝트 이름의 하드 코딩을 피할 수있는 방법

<for list="ProjectNameA,ProjectNameB" param="project"> 
    <sequential> 
    <echo message="@{project} has version ${@{project}}" /> 
    </sequential> 
</for> 

: 현재

나는 다음과 같은 for 루프에서 주어진 목록을 반복, 속성 작업을 사용하여 전체 파일을 읽고 for 루프? 기본적으로 각 행을 반복하고 프로젝트의 이름과 버전을 추출합니다. 이미 어떻게 propertyselector 작업의 활용에 대해, antcontrib for를 사용으로

답변

12

보고 :

여기에 아이디어가 projects 접두사로 한 번 속성을 읽을 수, 그리고 결과 세트를 사용하는 것입니다
<property file="properties.txt" prefix="projects."/> 
<propertyselector property="projects" match="projects\.(.*)" select="\1"/> 

<property file="properties.txt" /> 
<for list="${projects}" param="project"> 
    ... 
</for> 

속성을 사용하여 propertyselector 작업으로 쉼표로 구분 된 프로젝트 목록을 만듭니다. 그런 다음 속성은 으로 다시 읽습니다. 접두어가 없으므로 for 루프가 이전과 같이 진행될 수 있습니다.

+0

주어진 버그와 순차적 alement를 for 요소에 추가하여 더 명확하게했습니다. –

+0

수정 사항을 추가하고 싶지만 거부되었습니다. 그래서 주석으로 추가합니다 : for 작업은 최신 항아리의 antcontrib.properties에 어떻게 든 나열되지 않습니다. 해결 방법은 http://sourceforge.net/tracker/?func=detail&aid=2838574&group_id=36177&atid=416920 –

+0

버그 보고서에 명시된 것처럼 taskdef에 이름이 포함 된 클래스로 포함시키는 것입니다. 게시물 Martin에게 감사드립니다. . 개미 기여에 대한 설정이없는 사람들은 다음 라인도 필요합니다. 참조 : http : // ant-contrib. sourceforge.net/tasks/index.html#intro –

0

추가로 .property 파일 (build.properties 외)을 읽는다면 원하는 것을 명심하십시오. 추가 파일을 속성 파일 = "foo.property"태그를 통해 읽으면 ant는 파일이 읽혔으며 속성이로드되었음을 표시합니다. 그러나, 당신이 그들을 참조로 이동, 그들은 정의되지 않은 온다.

관련 문제