2011-10-17 3 views
0

내가 클로버와 수중 음파 탐지기 목표를 가진 ANT 빌드를 가지고, 샘플 명령은 ANT 클로버와 수중 음파 탐지기

ant clover.all sonar_all 

은 현재 내가 클로버 계측 내 소스 디렉토리를 설정합니다

<clover-setup initstring="${clover.db.file}"> 
     <fileset dir="${src.dir}"> 
... 

대상을 사용합니다. 내 테스트가 실행되고 예상대로 클로버 보고서가 표시됩니다. 내 수중 음파 탐지기 대상

<target name="sonar_all"> 
    <pathconvert pathsep="," property="echo.path.compile" refid="core.class.path"/> 
    <property name="sonar.libraries" value="${echo.path.compile}"/> 
    <property name="sonar.sources" value="${src.dir}"/> 
    <property name="sonar.projectName" value="Touchpoint"/> 
    <property name="sonar.binaries" value="${build.classes.dir}"/> 
    <property name="sonar.tests" value=""/> 
    <property name="sonar.host.url" value="${sonar.host.url}"/> 
    <property name="sonar.jdbc.url" value="${sonar.jdbc.url}"/> 
    <property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver"/> 
    <property name="sonar.jdbc.username" value="${sonar.jdbc.username}"/> 
    <property name="sonar.jdbc.password" value="${sonar.jdbc.password}"/> 
    <property name="sonar.exclusions" value=""/> 
    <property name="sonar.dynamicAnalysis" value="reuseReports"/> 
    <property name="sonar.surefire.reportsPath" value="${build.dir}/utest"/> 
    <property name="sonar.clover.reportPath" value="${build.dir}/clover/report/clover.xml"/> 
    <property name="sonar.java.source" value="1.6"/> 
    <property name="sonar.java.target" value="1.6"/> 
    <sonar:sonar key="xx" version="xx" xmlns:sonar="antlib:org.sonar.ant"/> 
    </target> 

는 제대로 작동하지만 클로버 코드는 클로버 계측 코드가 findbugs에 여러 개의 위반이 발생하기 때문에 이것은 findbugs 보고서에 문제가 발생, 원래의 소스 코드를 오히려 처리되고 계측 것으로 보인다. 내 수중 음파 탐지기 측정 기준이 벽에서 떨어졌습니다. 현재 해결 방법으로는 두 개의 CI 빌드가 있는데 하나는 클로버 용이고 다른 하나는 수중 음파 탐지기 용입니다.하지만 코드 커버리지 메트릭과 음파 탐지기 세부 정보는 절대로받을 수 없습니다.

인스트루먼트 된 코드가 다른 디렉토리에 있는지 확인하기 위해 clover-instr 대상을 사용하려고했지만 컴파일 된 코드가 여전히 하나의 클래스 디렉토리에 생성되므로 동일한 문제가 발생합니다. 다른 개발자가이 문제를 해결하는 데 사용한 전략에 궁금합니다.

가장 낮은 레벨에서 클로버 컴파일러를 사용해야하는 ant 컴파일 대상을 나타 내기 위해 clover.all 타겟에서 설정하는 속성 (예 : -Dclover.useCompile = true | false)이 있습니까? 나는 기본 클로버를 실행하는 것을 좋아한다. 모든 타겟, 그 다음에 소나 타겟은 인스트루먼트 된 소스 및 클래스 파일을 삭제하고 클로버 옵션없이 다시 생성하고 기본 소나 타겟을 실행한다.

ant clover.all clover_off sonar_all 

편집 1 : 만약 ANT 스크립트에서 두 번 컴파일 제안 Clover, Ant and Findbugs에이 항목을 발견했다. 개미 빌드는 일단 속성을로드 할 것이므로 컴파일 작업이 두 번, 클로버가 활성화되어 있고 두 번째로는 두 번 실행되도록 프로퍼티 중간 빌드를 어떻게 swtich 할 수 있는지 알 수 없습니다.

답변

0

기본 문제는 클로버가 소스 코드를 생성하고 클래스가 음파 탐지기의 두통을 일으키는 것이지만, 개미 작업을 통해 생성 경로를 구분할 수는 없습니다. 해킹 된 솔루션은 포스트 클로버 단계의 모든 클래스 파일을 소나 타겟의 시작 부분에있는 새 폴더로 복사 한 다음 이름에 "$ __ CLR"이라는 문자열이 있다는 가정하에 클로버 클래스를 삭제하는 것입니다. 그런 다음 원래 클래스 집합을 사용하여 메트릭을 생성하도록 sonar에 지시합니다.

<target name="sonar"> 

    <delete dir="${build.dir}/sonarclasses"/> 
    <mkdir dir="${build.dir}/sonarclasses/com"/> 
    <copy todir="${build.dir}/sonarclasses/com" verbose="true" failonerror="false"> 
     <fileset dir="${build.classes.dir}/com" excludes="com/**/*$__CLR*.class"/> 
    </copy> 

    <pathconvert pathsep="," property="echo.path.compile" refid="core.class.path"/> 
    <property name="sonar.libraries" value="${echo.path.compile}"/> 
    <property name="sonar.sources" value="${src.dir}"/> 
    <property name="sonar.projectName" value="Touchpoint"/> 
    <property name="sonar.binaries" value="${build.dir}/sonarclasses"/> 
    <property name="sonar.tests" value=""/> 
    <property name="sonar.host.url" value="${sonar.host.url}"/> 
    <property name="sonar.jdbc.url" value="${sonar.jdbc.url}"/> 
    <property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver"/> 
    <property name="sonar.jdbc.username" value="${sonar.jdbc.username}"/> 
    <property name="sonar.jdbc.password" value="${sonar.jdbc.password}"/> 
    <property name="sonar.exclusions" value=""/> 
    <property name="sonar.dynamicAnalysis" value="reuseReports"/> 
    <property name="sonar.surefire.reportsPath" value="${build.dir}/utest"/> 
    <property name="sonar.clover.reportPath" value="${build.dir}/clover/report/clover.xml"/> 
    <property name="sonar.java.source" value="1.6"/> 
    <property name="sonar.java.target" value="1.6"/> 
    <!--<property name="sonar.findbugs.reportPath" value="${build.dir}/findbugs/findbugs.xml"/>--> 
    <sonar:sonar