2011-03-11 2 views
7

maven-2에서 Maven 플러그인 실행이 실행될 때 단계를 조정하려고합니다. 그것은 (따라서 0 %의 커버리지 보고서를 생성하고, 계측 코드를 제거) AspectJ를를 사용하는 다른 플러그인과 충돌하지 않도록Maven -보고 섹션에서 선언 된 Plugin 실행 위치를 조정하십시오.

내 특정 문제는 라이프 사이클 단계 process-test-classes에 바인딩 cobertura:instrument 단계를 실행하려고 함께 . 그러나 제 질문은 좀 더 일반적인 질문입니다. 내가 mvn test 모든 것이 잘 작동 실행할 때

<build> 
    <plugins> 
     ... 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>cobertura-maven-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <id>instrument-late</id> 
        <phase>process-test-classes</phase> 
        <goals> 
         <goal>instrument</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     ... 

이 방법, cobertura : 악기가에서 실행되는 deafault 라이프 사이클 내에서

, 내 플러그인 선언에서 실행 섹션을 추가하여 그렇게 관리해야 내가 원하는 단계는, 클래스 등, 테스트 계측 클래스와 실행, 계측 받기 출력을 요약 : 나는 mvn site을 수행 할 때

[INFO] [clean:clean {execution: default-clean}] 
[INFO] [buildnumber:create {execution: default}] 
[INFO] [native2ascii:native2ascii {execution: native2ascii-utf8}] 
[INFO] [native2ascii:native2ascii {execution: native2ascii-8859_1}] 
[INFO] [resources:resources {execution: default-resources}] 
[INFO] [compiler:compile {execution: default-compile}] 
[INFO] [jar:jar {execution: lib}] 
[INFO] [resources:testResources {execution: default-testResources}] 
[INFO] Preparing hibernate3:hbm2ddl 
[WARNING] Removing: hbm2ddl from forked lifecycle, to prevent recursive invocation. 
[INFO] [buildnumber:create {execution: default}] 
[INFO] Change the default 'svn' provider implementation to 'javasvn'. 
[INFO] Checking for local modifications: skipped. 
[INFO] Updating project files from SCM: skipped. 
[INFO] Storing buildNumber: 2082 at timestamp: 1299861835678 
[INFO] Storing buildScmBranch: trunk 
[INFO] [native2ascii:native2ascii {execution: native2ascii-utf8}] 
[INFO] [native2ascii:native2ascii {execution: native2ascii-8859_1}] 
[INFO] [resources:resources {execution: default-resources}] 
[INFO] [hibernate3:hbm2ddl {execution: default}] 
[INFO] [compiler:testCompile {execution: default-testCompile}] 
[INFO] [jar:test-jar {execution: tests}] 
[INFO] [dbunit:operation {execution: test-compile}] 
[INFO] [cobertura:instrument {execution: instrument-late}] 
[INFO] [surefire:test {execution: default-test}] 
[INFO] Surefire report directory: /home/carles/dev/ism4web/portasigma/portasigma-web/target/surefire-reports 

... 

Results : 

Tests run: 62, Failures: 0, Errors: 0, Skipped: 0 

Flushing results... 
Flushing results done 
Cobertura: Loaded information on 74 classes. 
Cobertura: Saved information on 74 classes. 
[INFO] [dbunit:operation {execution: test}] 

그러나, 나는 플러그인에 대한 실행 단계 통제 할 수없는 것 같다. 내보고 섹션이 포함되어,

[INFO] [clean:clean {execution: default-clean}] 
[INFO] [buildnumber:create {execution: default}] 
[INFO] [native2ascii:native2ascii {execution: native2ascii-utf8}] 
[INFO] [native2ascii:native2ascii {execution: native2ascii-8859_1}] 
[INFO] [resources:resources {execution: default-resources}] 
[INFO] [compiler:compile {execution: default-compile}] 
[INFO] [jar:jar {execution: lib}] 
[INFO] [cobertura:instrument {execution: default-instrument}] 
[INFO] [hibernate3:hbm2ddl {execution: default}] 
[INFO] [compiler:testCompile {execution: default-testCompile}] 
[INFO] [jar:test-jar {execution: tests}] 
[INFO] [dbunit:operation {execution: test-compile}] 
[INFO] [cobertura:instrument {execution: instrument-late}] 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Unable to prepare instrumentation directory. 
Embedded error: source and destination are the same directory. 

악기를 두 번 호출되는 플러그인에 의해 정의 된 (나는 가정) 기본 상 하나, 또 다른 :

<reporting> 
    <plugins> 
     ... 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>cobertura-maven-plugin</artifactId> 
      <version>2.4</version> 
     </plugin> 

그리고 mvn site의 출력 (요약)를 말한다 내 재정의 단계에서 하나. 사이트 수명주기의 일부로 실행되는 플러그인에서 발생했다고 생각됩니다.

질문 : 보고 섹션/사이트 수명주기 내에서 플러그인 실행을 조정하는 방법을 찾지 못했습니다. 어떤 힌트?

+0

maven-2를 사용하고 있다고 가정 할 때, maven-3과 동일한 문제가 있습니까? – MrDrews

+0

당신이 옳다고 가정하고 있습니다. 나는 maven-3로 이주하지 않았다. 필자는 다른 방법으로 범위 보고서를 생성하는 특정 문제를 해결했습니다. 즉 cobertura-it maven 플러그인을 사용하여 실행 단계에 대한 세부적인 제어를 제공합니다. –

답변

1

나는 여기에서 추측하고있다.하지만 무슨 일이 일어나고있는 것은 코 베르 타 우라의 목표는 자체 라이프 사이클에서 실행되기 때문에 계측 단계는 한 번 메이븐 라이프 사이클에서 한 번, 코 베르 타우 라 라이프 사이클에서 한 번 두 번 호출된다는 것입니다.

0

Cobertura로 시도한 후 JaCoCo으로 전환했습니다. 즉석에서 계측 및 계측 된 클래스를 복원하는 옵션입니다.

나는 귀하의 제안을 시도하지 않았지만 cobertura-it입니다. 플러그인을 추가 옆에 필요한

만 설정 : 나를 위해

<executions> 
    <execution> 
    <id>jacoco-initialize</id> 
    <phase>initialize</phase> <!-- m2e complains if you skip, though mine complains on this either, had to mark it as ignored by m2e, feel free to omit the phase, defaults are fine --> 
    <goals> 
     <goal>prepare-agent</goal> 
    </goals> 
    </execution> 
    <execution> 
    <id>jacoco-site</id> 
    <phase>package</phase> 
    <goals> 
     <goal>report</goal> 
    </goals> 
    </execution> 
</executions> 

추가 보너스 내가 자바 1.7와 더 이상 문제를 가지고 있다는 것입니다.

EDIT : jacoco-initialize의 단계가 변경되었습니다. 이전 버전이 잘못되었습니다. mvn clean 이후에는 더 이상 jacoco.exec 파일을 만들지 않으므로 적용 범위 보고서가 생성되지 않습니다.