2014-01-07 4 views
0

어제 그날을 StackOverflow와 Google에서 위와 아래로 보냈지 만 몇 가지 해결책이 있지만 거의 효과가 없습니다. 나는 누군가가 이것이 가능한지 여부를 말해 줄 수 있기를 바랍니다.다른 부모가있는 다중 모듈 Maven 프로젝트의 IT 코드 범위

우리는 다중 모듈 Maven 프로젝트를 보유하고 있습니다. 내가 무슨 짓을하는 것은 Jacoco에서 UT 및 IT 코드 커버리지 젠킨스를 통해 음파 탐지기 설치가

Web Service XYX 
    +- pom.xml 
    +- Web Module 
     +- pom.xml (parent pom is WebService 123) 
    +- API Module 
     +- pom.xml (parent pom is API ABC) 
    +- API Implementation 
     +- pom.xml (parent pom is API ABC) 

입니다 : 난 그냥 구조가 같은 것을 배웠습니다. UT Coverage는 UT가 결합 된 상태에서 Sonar로 정확하게 보내집니다. IT Coverage는 항상 0 %입니다. My IT는 Maven Tomcat 플러그인을 사용하여 WAR를 시작한 후 Web Module에 대해 실행됩니다. 운동해야하는 코드는 모듈 API 구현 내부에 있습니다. jacoco-it.exec 파일이 생성되어 Sonar에 의해 분석되었지만, 항상 코드 줄이 맞지 않는다고 나에게 알려줍니다. 실제로이 작업을 수행 할 수있는 방법이 있습니까?

은 BTW - 나는이 문서가 내가 필요 정확히 나타 내기 때문에 수행 할 수 있습니다 알고 http://www.sonarqube.org/measure-code-coverage-by-integration-tests-with-sonar/

그러나 문서에서는 모듈이 프로젝트에서 같은 부모라고하는 경우 언급되지 않습니다. 나는 그것이한다는 가정을하고있다.

답변

0

위변조를 검색 한 후 가장 좋은 해결책은 실제로 주 POM을 부모로 언급 한 IT 용 모듈을 추가하는 것입니다. Tomcat Maven 모듈을 사용하여 IT 모듈에서 WAR를 잡고 실행하려면 Cargo를 사용하십시오. 코드 커버리지에는 이제 웹 모듈의 클래스가 아닌 모든 클래스가 있습니다.

0

다른 상위 담비를 사용하는 것으로 의심됩니다. 범위를 분석 할 때 sonar.jacoco.itReportPath 속성에 지정된 범위 파일에 대해 각 모듈의 코드를 확인합니다. 기본값은 target/jacoco-it.exec입니다. 따라서 WebModule을 분석 할 때 WebModule/target/jacoco-it.exec의 수신 범위 정보를 확인합니다.

그래서 내 프로젝트에서는 IT 커버리지 데이터 대신 루트 모듈의 중앙 파일을 사용합니다. 당신이 그 빌드를 실행하면

<plugin> 
    <groupId>org.jacoco</groupId> 
    <artifactId>jacoco-maven-plugin</artifactId> 
    <version>0.7.4.201502262128</version> 
    <executions> 
    <execution> 
     <id>prepare-it-agent</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
     <goal>prepare-agent</goal> 
     </goals> 
     <configuration> 
     <destFile>${session.executionRootDirectory}/target/jacoco-it.exec</destFile> 
     <append>true</append> 
     <propertyName>failsafeArgLine</propertyName> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

${session.executionRootDirectory} 속성은 당신의 케이스 WebServiceXYZ에, 실행의 루트입니다. 두 개 이상의 중첩 수준이있는 다중 모듈이있는 경우에도이 기능이 작동합니다.

이제 IT 범위를 분석 할 때 해당 파일을 사용하도록 sonar를 지정해야합니다. 따라서 sonar.jacoco.itReportPath을 해당 파일로 설정해야합니다. 아쉽게도 session.executionRootDirectory 속성에서는 작동하지 않으므로 파일의 절대 경로를 수동으로 설정해야합니다. 이 경로는 빌드 환경에 따라 다르므로 절대 경로는 pom.xml에 지정하지 않는 것이 좋습니다. 따라서 Sonar에서 경로를 설정하거나 빌드 환경의 System 속성으로 설정하십시오. 나는 Sonar Project Settings (Java> Jacoco)에서 직접 설정했다. 예를 들어 /opt/buildroot/myProject/target/jacoco-it.exec이다. 이제 소나는 각 모듈의 IT 서비스 분석을 위해 해당 파일을 검사합니다.