2011-05-09 5 views
7

Maven에서는 일반적으로 반복되는 조각을 재사용 가능한 "라이브러리"(플러그인)로 리팩토링 할 수 있습니까? 나는 내 자신의 플러그인을 작성할 수 있다는 것을 알고 있지만 종종 재사용하고 싶은 기능은 이미 pom.xml에 단편으로 표현되어 있으며 자연스러운 경향은 재사용 메커니즘이 해당 단편을 유지해야한다는 것입니다. XML. 점 I 저지/JAX-RS의 소스 코드에서 WADL 파일을 생성 한 다음 WADL과 소스 코드를 자신의 자바 독과는 개발자 문서를 생성하기위한 절차 (partly described here)를 사용하고에서Maven pom.xml 파일을 재사용 가능한 XML 조각으로 리팩터링 할 수 있습니까?

케이스. 이 페이지의 절차는 두 개의 플러그인 실행을 설명하며, 세 번째 플러그인 (org.codehaus.mojo : exec-xsltproc)과 내 자신의 XSL 파일을 사용하여 WADL을 HTML로 변환합니다.

이 절차는 여러 Maven 프로젝트에서 사용되었습니다. 상용구는 100 lines of XML입니다. 프로젝트 간 변경 사항은 해당 소스 코드의 패키지 이름 (링크 된 상용구의 com.example.myapp.rest)입니다. 그러므로 이것을 부모 부모 나 매개 변수화를 허용하지 않는 다른 메커니즘으로 옮기는 것은 불가능합니다.

은 100 라인 (및 하나의 XST 파일)을 공통 위치에 집계하거나 템플릿 아웃하거나 리팩토링하는 것입니다. 재사용 가능한 maven 실행은 Maven 플러그인을 통해 제공된다는 것을 알고 있습니다. 이상하게도 XML로 이미 표현한 것을 다시 표현하기 위해 Java (또는 Groovy)를 작성하지 않아도됩니다.

Maven pom.xml 파일 XML로 리팩토링 할 수 있습니까? 대부분의 문제와 마찬가지로

당신은 아마 < 부모 > 태그를 통해 프로젝트에서이 그 100 개 라인 추가하고 상속하는 치어 전용 프로젝트를 만들 수

답변

4

당신이하는 것처럼 쉬운 일은 아닙니다. 이 기능을 정확히 설명하는 "mixins"는 얼마 동안 Maven 로드맵에있었습니다.

모든 POM이 공통 조상을 공유한다고 가정 할 때 상위 POM을 사용하여 공유 할 수 있습니다. 다른 요소 만 구성 할 수 있으며 나머지 요소와 병합됩니다. 또는 사용 된 위치에서 정의 된 속성 값을 할당 할 수 있습니다. 부모는 프로젝트 유형보다는 구조를 설명하기 때문에 일반적으로이 방법은이 사용 사례에 적절하지 않음을 이해합니다.

또 다른 대안은 이러한 프로젝트에 대한 아키타 입을 만드는 것입니다. 이렇게하면 한 번 정의하여 새로운 프로젝트로 생성 할 수 있지만 직접 재사용하는 것은 아닙니다.

지금 가장 좋은 해결책은 맞춤 플러그인 일 것입니다. 저는 이것이 Don Brown이 mojo-executor 플러그인을 작성하는 데 영감을 주었다고 믿습니다. 이제는 https://github.com/TimMoore/mojo-executor에 있습니다. 하지만 네, 그러면 Java/Groovy가 필요합니다 :)

1

..

+0

이것은 작게 작동 할 수있는 접근법입니다 (질문에 암시 함). 단점은 한 번만 할 수 있다는 것입니다. 예를 들어 여러 부모를 함께 구성 할 수는 없습니다. –

+1

체인 hierachy를 만들 수 있습니다. 약간 지저분하지만 작동해야합니다. parent1-> parent2-> parent3-> your module – mglauche

2

당신은 당신의 메이븐에 직면하게 될 여행은 앤트입니다.

정확히 원하는 것을 수행하는 앤트 빌드 스크립트를 만든 다음 maven-antrun-plugin을 통해 이것을 호출하십시오.

maven에서 사용할 수있는 모든 속성을 대상 구성에서도 사용할 수 있으므로 maven 속성을 통해 빌드 스크립트를 구성 할 수 있습니다.

메이븐 : 0, 개미 : 1.

QED.

+0

당신의 접근법은 위의 예제에서와 같이 기존의 Maven 플러그인을 사용할 수 없습니까? –

+0

3 개의 메이븐 플러그인을 동일한 Ant 태스크로 변경할 수 있습니까? – npellow

관련 문제