`
headsen
  • 浏览: 20349 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

Sonar代码分析实战(7)——1.2.3 使用Maven插件

阅读更多

 

如果您的项目是基于Maven构建,那么推荐使用此方式。

 

前提准备

必须先对Maven的本地仓库进行一些配置,以便Maven Sonar插件正常运行。

相关的配置请参考本手册前面章节。

 

分析Maven工程

分析Maven工程只需要在pom.xml存在的目录下运行MVN的Sonar插件指令。Sonar指令运行前最好运行install指令,保证代码最新。

 

推荐的方法

mvn clean install -DskipTests=true

mvn sonar:sonar

 

设置skipTests=true是为了避免单元测试执行两次。install和sonar指令默认都会执行单元测试。你可以禁用单元测试,相关的配置参考Maven的相关文档。

 

注意:

使用Eclipse

确保没有使用maven embedder插件。定义Maven执行环境为本地安装的Maven,使用最新的Macen插件,不要勾选"resolve workspace artifacts"。

详细说明:http://jira.codehaus.org/browse/SONAR-929

 

高级选项

一些Sonar不支持的高级选项请不要使用,如"--projects" 和 "--resume-from"。

 

替代方法

如果你不想使用上面的两行指令,你可以直接使用下面的一行指令。

mvn clean install sonar:sonar -Dmaven.test.failure.ignore=true

这个指令运行时,单元测试会执行两次,如果加上参数DskipTests=true。Sonar就会执行单元测试,代码分析报告中也不会有单元测试的结果。

参数-Dmaven.test.failure.ignore=true确保及时单元测试执行失败,Sonar的分析结果依然会收录。

 

配置Sonar分析

和Sonar Runner一样,可以对Sonar分析进行一些参数配置。

一个简单的pom.xml配置示意here

额外的分析参数,请下面章节中。

 

安全:

从Sonar3.4开始,如果一个工程被匿名访问,执行代码分析时,'sonar.login' and 'sonar.password'属性是必须的。这些属性必须属于该项目‘User’角色下的一个用户。你可以通过其他方式,提供这些属性:

直接通过命令行:

-Dsonar.login=myUser -Dsonar.password=myPassword

在pom.Xml文件

在Maven全局配置文件settings.xml

 

特殊的一个项目允许匿名分析:

1、'sonar.forceAuthentication'设置为true;

2、'sonar.forceAuthentication'设置为false,且'Anyone'用户组没有被授予该项目'User'角色

 

备注:

 

工程实例:

同样的为了帮助入门学习,gitthub提供了实例项目,可以供浏览和下载。

browsed or downloaded: projects/languages/java/maven/java-maven-simple

 

Maven插件版本

两个版本的Sonar maven插件存在,支持Maven2和Maven3。使用哪种取决于项目的Maven 版本。

Maven2 Only

将以下配置加载pom.xml文件中

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>1.0</version>
      </plugin>
    <plugins>
  </pluginManagement>
</build>

Maven 3 only

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>2.0</version>
      </plugin>
    <plugins>
  </pluginManagement>
</build>

Both Maven 2 and Maven 3

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>${sonarVersion}</version>
      </plugin>
    <plugins>
  </pluginManagement>
</build>
<profile>
  <id>maven-2</id>
  <activation>
    <file>
      <!-- basedir expression is only recognized by Maven 3.x (see MNG-2363) -->
      <missing>${basedir}</missing>
    </file>
  </activation>
  <properties>
    <sonarVersion>1.0</sonarVersion>
  </properties>
</profile>
<profile>
  <id>maven-3</id>
  <activation>
    <file>
      <!-- basedir expression is only recognized by Maven 3.x (see MNG-2363) -->
      <exists>${basedir}</exists>
    </file>
  </activation>
  <properties>
    <sonarVersion>2.0</sonarVersion>
  </properties>
</profile>

 

 

分析多模块多语言项目

从Sonar3.3开始,支持分析多模块多语言项目。只需为每个模块pom.xml配置对应的'sonar.language'属性即可。

同样,为了帮助读者尽快上手,github上有实例可供浏览和下载。

 browsed or downloaded: projects/languages/multi-language/multi-language-java-javascript-maven

 

 

文档下载:http://wenku.baidu.com/view/088e5b1b6edb6f1aff001fc0.html

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics