我们的项目目前使用Ivy进行依赖管理。我们真的想将我们的Hudson构建服务器与Sonar集成。到目前为止,这是一个相对简单和直接的任务。当然,我们已经将Sonar设置为以Sonar Lite模式运行(因为我们不是Maven项目)。
不幸的是,当我们的Sonar字节码扫描开始时,我们得到了很多以下内容:
[警告]无法访问“XXX”类 通过ClassLoader。 [WARN]班级 'XXX'无法通过 类加载器。 ...... [WARN]班级'XXX' 无法通过 类加载器。
据我所知,这是因为我们的Sonar Lite虚拟POM文件中没有定义依赖关系,因此在分析过程中不会选择要遍历的库。
Sonar installation documentation提到必须通过Maven pom文件将依赖项添加到aux类路径才能对此进行纠正。但是,似乎没有任何方法可以无痛地将这些依赖项与我们的常春藤依赖项(其中有数百个)进行同步。我们显然正在寻找一种定义依赖关系的方法,而无需在我们的虚拟pom文件中复制每个依赖关系。
在声纳codehaus网站上提出的Several issues(例如this one)似乎围绕我正在寻找的相同功能跳舞,但似乎没有提供合理的解决方案(除非我失踪)东西)。之前有没有人处理过这种情况并且有一个相当不错的解决方案?
由于
答案 0 :(得分:2)
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>
另请注意常春藤信息任务如何用于设置Sonar密钥和版本。
答案 1 :(得分:1)
您是否尝试过将ivy.xml的XSL转换为虚拟pom.xml?