Sonar Lite Mode Зависимость Aux Classpath и Ivy - PullRequest
1 голос
/ 08 февраля 2011

Наш проект в настоящее время использует Ivy для управления зависимостями. Мы бы очень хотели интегрировать наш сервер сборки Hudson с Sonar. До сих пор это была относительно простая и простая задача. Конечно, мы настроили Sonar для работы в режиме Sonar Lite (так как мы не проект Maven).

К сожалению, когда начинается сканирование байт-кода Sonar, мы получаем много следующего:

[WARN] Класс 'XXX' недоступен через ClassLoader. [WARN] Класс «XXX» не доступен через ClassLoader. ... [WARN] Класс 'XXX' недоступен через ClassLoader.

Я понимаю, что это потому, что наши зависимости не определены в нашем фиктивном POM-файле Sonar Lite и, следовательно, библиотеки не выбираются для анализа во время анализа.

В документации по установке Sonar упоминается, что зависимости должны быть добавлены в путь к классам aux через файл pom Maven, чтобы это можно было исправить. Тем не менее, кажется, нет никакого способа безболезненно синхронизировать эти зависимости с нашими зависимостями плюща (которых есть сотни). Очевидно, что мы ищем способ определения наших зависимостей без необходимости реплицировать каждую из них в нашем фиктивном файле pom.

Несколько проблем , поднятых на сайте Codehaus Sonar (например, этот ), похоже, связаны с той же функцией, которую я ищу, но ни одна из них не предлагает разумного решения. (если я что-то упустил).

Кто-нибудь имел дело с этой ситуацией раньше и имеет достаточно хорошее решение?

Спасибо

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Механизм Sonar lite теперь кажется устаревшим с Sonar 2.6.

Два новых способа интеграции Sonar со сборкой не Maven:

Задача ANT разработана специально для комбинации с контролем ivy путей к классам сборки и времени выполнения (с использованием конфигураций):

<!--
  Uses ivy to download dependencies
  -->

  <target name="dependencies" description="Resolve project dependencies and set classpaths">
    <ivy:resolve/>
    <ivy:cachepath pathid="compile.path"  conf="compile"/>
    <ivy:cachepath pathid="runtime.path"  conf="runtime"/>
    <ivy:cachepath pathid="test.path"     conf="test"/>
    <ivy:cachepath pathid="anttasks.path" conf="anttasks"/>
  </target>

  <!--
  Perform source code analysis
  -->

  <target name="sonar-init" description="Declare sonar ant task">
    <taskdef uri="antlib:org.sonar.ant" 
             resource="org/sonar/ant/antlib.xml" 
             classpathref="anttasks.path"/>
  </target>

  <target name="sonar" depends="test,sonar-init" description="Run the Sonar code analysis tool">
    <ivy:info/>

    <sonar:sonar workDir="${sonar.workDir}" key="${ivy.organisation}:${ivy.module}" version="${ivy.revision}">
      <!-- Project layout -->
      <sources>
        <path location="${build.srcDir}"/>
      </sources>
      <tests>
        <path location="${build.testDir}"/>
      </tests>
      <binaries>
        <path location="${build.outputDir}"/>
        <path location="${build.testOutputDir}"/>
      </binaries>
      <libraries>
        <path refid="test.path"/>
      </libraries>
      <!-- Additional Sonar configuration -->
      <property key="sonar.java.source" value="1.5"/>
      <property key="sonar.java.target" value="1.5"/>
    </sonar:sonar>
  </target>

Дополнительно обратите внимание, как задача ivy info может использоваться для установки ключа и версии сонара.

1 голос
/ 08 февраля 2011

Вы пробовали XSL-преобразование ivy.xml в ваш фиктивный pom.xml?

...