2013-06-03 2 views
0

의존 관계 jar 파일의 압축을 풀고 프로젝트의 특정 위치에 리소스 파일 (이 경우 템플릿)을 복사하는 Maven 플러그인 (unpackTemplates)을 만들었습니다.maven 이슈가 설치되었을 때 maven plugin을 실행할 수 있습니까?

지금 당장 템플릿을 사용하는 모든 프로젝트의 pom 파일에 다음을 넣습니다. 모양은 다음과 같습니다.

<project> 
    <groupId>DuriansAreDope</groupId> 
    <artifactId>DuriansAreDope</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <build> 
     <plugin> 
     <groupId>mycorp</groupId> 
     <artifactId>unpackTemplates</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
       <configuration> 
        <groupId>com.mycorp.lib</groupId> 
        <version>1.0</version> 
        <artifactId>Lib-With-Templates</artifactId> 
       </configuration> 
       <goals> 
        <goal>unpackTemplates</goal> 
       </goals> 
       <phase>generate-sources</phase> 
      </execution> 
     </executions> 
     </plugin> 
     <pluginManagement>....</pluginManagement> 
    </build> 
    <dependencies> 
     <dependency> 
     <groupId>com.mycorp.lib</groupId> 
     <artifactId>Lib-With-Templates</artifactId> 
     <version>1.0</version> 
     </dependency> 
    </dependencies> 
</project> 

위 프로젝트는 우리에게 적합합니다. 그것은 플러그인을 호출하고 플러그인은 그 일을합니다. 그러나 우리는 모든 프로젝트의 pom에 플러그인 섹션을 추가하는 것을 피하고 싶습니다.

플러그인 섹션을 종속성 pom에 두는 것이 더 합리적입니다. 이 방법을 사용하면 평소와 같이 <dependency> 태그를 추가하는 것 이상의 프로젝트를 수정할 필요가 없습니다. 그리고 의존성은 설치되어있는 곳마다 플러그인을 실행합니다.

Gson의 pom 파일에 <build><plugins>...</plugins></build> 섹션이 포함되어 있습니다. 그러나 종속성을 제공 할 때 다음 pom 파일은 플러그인이 실행되지 않습니다 (종속성이 발견되고 다운로드되고 설치되는 등).

<project> 
    <groupId>com.mycorp.lib</groupId> 
    <artifactId>Lib-With-Templates</artifactId> 
    <version>1.0</version> 
    <build> 
     <plugin> 
     <groupId>mycorp</groupId> 
     <artifactId>unpackTemplates</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
       <configuration> 
        <groupId>com.mycorp.lib</groupId> 
        <version>1.0</version> 
        <artifactId>Lib-With-Templates</artifactId> 
       </configuration> 
       <goals> 
        <goal>unpackTemplates</goal> 
       </goals> 
       <phase>generate-sources</phase> 
      </execution> 
     </executions> 
     </plugin> 
     <pluginManagement>....</pluginManagement> 
    </build> 
</project> 

내가 잘못하고있는 아이디어가 있습니까? 아니면 Gson pom이 단순히 완전히 다른 작업을 수행하고 있습니까?

(주의 : 플러그인에 대한 (문자열) 매개 변수이기 때문에 <configuration>의 groupId/version/artifactIds가 필요합니다. 아마도 내가 run-straight-from-dependency 접근 방식을 사용하면 리팩토링 할 수 있지만 다시 , 심지어는 매개 변수를 사용하여 미봉책 버전을 실행하지 않는 것)

+0

플러그인 외에도 [해당 플러그인이 이미 있습니까?] (http://maven.apache.org/plugins/maven-remote-resources-plugin/examples/sharing-resources.html). 내가 뭔가를 감독 할 수도 있지만, 당신의 문제가 정확히 무엇인지 모르겠습니다. 왜냐하면 당신은'설치의 마지막 단계가 플러그인을 실행하는 것이라는 점을 도서관에 알리는 것이 더 합리적이라고 말했지만'어떤 도서관에 대해 이야기하고 있는지에 대해 썼다. 조금 더 자세히 설명해 주시겠습니까? – khmarbaise

+0

감사합니다. @khmarbaise. 우리는 maven "unpack"플러그인을 찾았지만 당신이 링크 한 "원격 리소스"가 아닙니다. 매개 변수의 구조에서 볼 때 필자는 둘 다 비슷한 일을한다 : 프로젝트에 종속 파일을 복사한다. 그러나 파일을보다 잘 제어 할 필요가 있습니다. 이름을 변경하고 특정 위치에 파일을 놓을 필요가 있습니다. – aarondev

+0

@khmarbaise : 마지막 비트를 상세히 설명하자면, 프로젝트에 Plugin을 추가하는 대신 종속성 자체에 Plugin을 추가하고 싶습니다. 우리는 이것이 프로젝트가 플러그인에 대해 알 필요가 없거나 플러그인을 호출 할 필요없이 종속물이 설치되어있는 곳이면 어디서나 플러그인이 실행된다는 것을 의미합니다. – aarondev

답변

0

두 지점 :.

먼저 내가 점에서 khmarbaise 동의를 당신이 그 작업에 대한 자신의 플러그인이 필요하지 않습니다. 특정 위치로 압축을 풀려면 dependency:unpack-dependencies 및 outputDirectory 매개 변수를 사용할 수 있습니다. 더 많은 구성이 필요한 경우 조립품 플러그인을 사용하여 압축을 풀고 싶은 이슈를 구조화 할 수 있습니다.

둘째, 많은 프로젝트에서 lib-with-templates의 내용을 사용하고 싶습니다. 왜 당신이 당신이 그것을 필요로하는 모든 pom에 포함하는 부모 pom에 플러그인과 의존성을 추가하지 않습니까? 그렇다면 "모든 pom"에서 선언 할 필요가 없습니다. 모든 POM에 실제로 필요하지 않으면 프로필에 넣고 적절한 활성화를 선택할 수 있습니다.

HTH!

관련 문제