2008-11-12 4 views
1

일부 파일을 일종의 플러그인으로 포함하는 Ant 빌드 파일을 만들고 싶습니다.런타임에 파일을 찾아서 Ant 빌드 파일로 가져올 수 있습니까?

그래서 프로젝트에서 피쳐를 활성화하려면 - pmd-checking과 같이 - 디렉토리에 pmd.xml을 복사하고 build.xml이 아이디어를 시작하고 pmd.xml이 존재하고 가져옵니다 , 새로운 대상을 빌드에 사용할 수 있습니다.

하지만 '가져 오기'작업은 최상위 작업으로 만 사용할 수 있으므로이 기능을 어떻게 적용할지 모릅니다. 이것이 앤트와 가능한가? 그렇다면 어떻게 할 수 있는가?

편집 : 나는 새로운 대상이 ant -p에 의해 제시된 목록에 나타날 수있는 솔루션을 선호합니다.

답변

2

가져 오기 작업 설명서에는 명시 적으로 언급되어 있지 않지만 작업에서는 단일 파일 대신 파일 세트를 사용할 수 있습니다. 은 따라서이 최상위 수준에서, 트릭을 할해야하고, 생성 된 대상은 ant -p별로 나열됩니다 :이와

<property name="plugins.dir" value="plugins" /> 
<fileset id="plugin.modules" dir="${plugins.dir}"> 
    <include name="**/*.xml" /> 
</fileset> 

<import> 
    <fileset refid="plugin.modules" /> 
</import> 

한 주름는 '플러그인'디렉토리에 적어도 하나의 플러그인이 있어야한다는 것입니다 , 또는 가져 오기가 실패합니다. 그 거기 후에는 바로 플러그인 디렉토리에 새로운 플러그인을 넣을 필요가

<project /> 

을, 미래의 빌드에 의해 그들이 가져옵니다 : empty.xml라고 말 - 당신은 자리 표시 자 파일을 만들 수 있습니다.

+0

잘 작동합니다. 고맙습니다. – Mnementh

3

ant 작업을 사용할 수 있으며 대상 이름을 매개 변수화 할 수도 있습니다. 다음 예는 다음과 같습니다

<ant antfile="plugins/pmd.xml" target="${pmd-target}"/> 

당신이 더 많은 유연성을 원하는 경우에, 나는 gant 또는 gradle을 확인하는 것이 좋습니다.

+0

가능한 해결책은 있지만 새로운 대상은 'ant -p'목록에 없습니다. – Mnementh

0

나는 개념적으로 가능하길 바라지는 않는다. -p 명령 줄 인수는 작업을 실행하지 않고 단지 파일을 구문 분석합니다. 당신이 원하는 것은 처형되어야합니다.

그러나 나는 ant-contrib 프로젝트를 보겠습니다. 조건부 <if> 작업이있어서 원하는 경우에만 최상위 가져 오기 작업을 수행 할 수 있습니다.

3

import 작업에 대한 설명서에서 optional 특성을 유의하십시오. 이것을 true으로 설정하면 누락 된 포함이 빌드를 손상시키지 않습니다.

따라서 pmd.xml은 포함되어 있지만 포함되어 있지 않은 경우 빌드를 손상시키지 않습니다.

테스트되지 않았으므로 가져온 파일이있는 경우 대상을 ant -p에 포함시키는 것에 대해서는 긍정적이지 않습니다.

+0

'ant -p'는 가져온 파일에 정의 된 대상을 나열합니다. 나는이 속성을 보지 못했다. 조금 도움이된다. 하지만 런타임에 플러그인을 얻을 수 있다면 더 좋아할 것입니다. – Mnementh

+0

빌드 파일은 파일을 언제 포함해야하는지 어떻게 알 수 있습니까? 속성을 매개 변수로 전달하고 일부 조건부 대상을 빌드 파일에 넣어야합니다. 이것은 "-p"옵션이 아닌 실행시에만 작동합니다. 사용 사례에 대해 자세히 알려주십시오. –

+0

주어진 디렉토리에 모든 ant 파일을 포함하거나 패턴으로 일치 시키려고합니다. 나는 완벽한 해결책이 없다는 것을 알지만, Miguel Ping의 답과 해결책을 결합하여 대부분의 경우를 포착 할 수 있습니다. – Mnementh

관련 문제