АНТ клевер и сонар - PullRequest
       15

АНТ клевер и сонар

0 голосов
/ 17 октября 2011

У меня есть сборка 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>

также работает правильно, но кажется, что инструментальный код Clover обрабатывается, а не исходный исходный код, это вызывает проблему с отчетом findbugs, так как код инструментария Clover вызывает многочисленные нарушения в findbugs. Мои показатели гидролокатора вне стен. В настоящее время в качестве обходного пути у нас есть две сборки CI, одна для клевера и вторая для сонара, но это означает, что я никогда не смогу получить показатели покрытия кода и детали сонара в одной.

Я пытался использовать цель clover-instr, чтобы гарантировать, что инструментированный код помещен в другой каталог, но, поскольку скомпилированный код все еще генерируется в один каталог классов, возникает та же проблема. Мне интересно, какую стратегию использовали другие разработчики, чтобы обойти это.

На самом низком уровне, есть ли свойство (т.е. -Dclover.useCompile = true | false), которое устанавливается целью clover.all для указания цели компиляции муравья, что должен использоваться компилятор клевера? Мне нравится запускать заданную по умолчанию цель clover.all, затем в цели сонара удалить инструментальные исходные файлы и файлы классов, заново сгенерировать без опции клевера и запустить стандартную цель сонара.

 ant clover.all clover_off sonar_all

РЕДАКТИРОВАТЬ 1: Если этот элемент найден в Clover, Ant и Findbugs , что предполагает компиляцию дважды в скриптах ANT. Поскольку сборка муравья будет загружать свойства только один раз, я не могу понять, как я могу выбрать свойство в середине сборки, чтобы гарантировать, что задача компиляции запускается дважды, один раз с включенным клевером и второй раз без.

1 Ответ

0 голосов
/ 18 октября 2011

Основная проблема здесь в том, что исходный код, сгенерированный клевером, и классы вызывают головную боль у сонара, но невозможно разделить пути генерации с помощью задач ant.Мое взломанное решение состоит в том, чтобы скопировать все файлы классов из фазы постклевера в новую папку в начале цели сонара, а затем удалить классы клевера, если предположить, что в их имени есть строка «$ __ CLR».Затем я инструктирую гидролокатор генерировать его метрики, используя оригинальный набор классов.

<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
...