Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件
本文由CSDN博客万一博主翻译。其它章节的翻译请參见:
http://blog.csdn.net/column/details/gradle-translation.html
翻译项目请关注Github上的地址:
https://github.com/msdx/gradledoc/tree/1.12。
直接浏览双语版的文档请訪问:
http://gradledoc.qiniudn.com/1.12/userguide/userguide.html。
另外。Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,眼下0.2.1版本号兼容 android 2.2以上系统,地址例如以下:
http://www.wandoujia.com/apps/com.githang.gradledoc
翻译不易,转载请注明本文在CSDN博客上的出处:
http://blog.csdn.net/maosidiaoxian/article/details/46798999
关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。如有发现翻译有误的地方,将首先在以上两个地方更新。
因时间精力问题。博客中发表的译文基本不会同步改动。
第三十六章. Sonar Runner 插件
Sonar runner 插件是眼下仍是孵化状态。请务必注意,在以后的 Gradle 版本号中,DSL 和其它配置可能会有所改变。
Sonar Runner 插件提供了对 Sonar,一个基于 web 的代码质量监測平台的集成。它基于Sonar Runner,一个分析源码及构建输出,并将全部收集的信息储存在 Sonar 数据库的 Sonar client组件。
相比单独使用 Sonar Runner,Sonar Runner 插件提供了下面便利:
- 自己主动配置 Sonar Runner
-
能够通过一个正规的 Gradle 任务来运行 Sonar Runner,这使得在不论什么 Gradle 可用的地方。它都能够用(开发者构建,CI server等),而无需下载。安装,和维护 Sonar Runner 的安装。
- 通过 Gradle 构建脚本动态配置
-
依据须要。能够利用 Gradle 脚本的全部特性去配置 Sonar Runner。
- 提供了广泛范围的默认配置
-
Gradle 已经有非常多 Sonar Runner 成功分析一个项目所需的信息。
基于这些信息对 Sonar Runner 进行预配置,降低了很多手动配置的须要。
Sonar Runner 插件是Sonar 插件的继任者。眼下它还在孵化中的状态。该插件基于Sonar Runner 2.0。这使它与Sonar 2.11 或更高的版本号相兼容。不同于 Sonar 插件,Sonar Runner 插件与 Sonar 3.4 或更高的版本号一起使用时也表现正常。
若要開始,请对要分析的项目配置使用 Sonar Runner 插件。
如果一个本地的 Sonar 服务使用开箱即用的设置启动和执行,则不须要进一步的强制性的配置。执行gradle
sonarRunner
并等待构建完毕。然后打开 Sonar Runner 输出结果的底部所指示的网页。
你如今应该可以看到分析结果了。
在运行sonarRunner
任务前。全部产生输出以用于
Sonar 分析的须要都须要被运行。
通常情况下。它们是编译任务、測试任务和代码覆盖任务。
为了满足这些须要。假设应用了java
插件。Sonar
Runner 插件将从sonarRunner
加入一个对 test
的任务依赖。依据须要。能够加入很多其它的任务依赖。
Sonar Runner 插件向 project 加入了一个 SonarRunner
扩展,它同意通过被称为 Sonar
属性 的键/值对配置 Sonar Runner。一个典型的基线配置包含了Sonar server和数据库的连接设置。
演示样例 36.2. 配置 Sonar 连接设置
build.gradle
sonarRunner { sonarProperties { property "sonar.host.url", "http://my.server.com" property "sonar.jdbc.url", "jdbc:mysql://my.server.com/sonar" property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver" property "sonar.jdbc.username", "Fred Flintstone" property "sonar.jdbc.password", "very clever" } }
对于标准的 Sonar 属性的完整列表,请參阅 Sonar 文档。假设你碰巧使用另外的 Sonar 插件,请參考它们的文档。
或者,能够从命令行设置 Sonar 属性。有关很多其它信息,请參见第35.6节,“从命令行配置 Sonar 设置” 。
Sonar Runner 插件利用 Gradle 的对象模型所包括的信息。提供了很多标准的 Sonar 属性的智能默认值。下表总结了这些默认值。
注意,对于配置使用了 java-base
或 java
插件的project,有提供另外的默认值。对于一些属性(尤其是server和数据库的连接配置)。确定留给
Sonar Runner 一个合适的默认值。
表 36.1. 标准 Sonar 属性的 Gradle 默认值
Property | Gradle 默认值 |
sonar.projectKey | "$project.group:$project.name" (所分析的层次结构的根项目,否则留给 Sonar Runner 处理) |
sonar.projectName | project.name |
sonar.projectDescription | project.description |
sonar.projectVersion | project.version |
sonar.projectBaseDir | project.projectDir |
sonar.working.directory | "$project.buildDir/sonar" |
sonar.dynamicAnalysis | "reuseReports" |
表 36.2. 配置使用 java-base
插件时另外加入的默认值
Property | Gradle 默认值 |
sonar.java.source | project.sourceCompatibility |
sonar.java.target | project.targetCompatibility |
表 36.2. 配置使用 java
插件时另外加入的默认值
Property | Gradle 默认值 |
sonar.sources | sourceSets.main.allSource.srcDirs(过滤为仅仅包括存在的文件夹) |
sonar.tests | sourceSets.test.allSource.srcDirs(过滤为仅仅包括存在的文件夹) |
sonar.binaries | sourceSets.main.runtimeClasspath (过滤为仅仅包括存在的文件夹) |
sonar.libraries |
sourceSets.main.runtimeClasspath (过滤为仅包含文件 ;假设有必要会加上 rt.jar ) |
sonar.surefire.reportsPath | test.testResultsDir (假设该文件夹存在) |
sonar.junit.reportsPath | test.testResultsDir (假设该文件夹存在) |
Sonar Runner 插件可以一次分析整个项目的层次结构。它可以在 Sonar 的 web 界面生成一个层次图。该层次图包括了综合的指标且可以深入到子项目中。分析一个项目的层次结果还可以比单独分析每一个项目花费更省时间。
要分析一个项目的层次结构。 须要把 Sonar Runner 插件应用于层次结构的最顶层项目。通常(但不是一定)会是这个 Gradle 构建的根项目。
与分析有关的信息作为一个总体,比方server和数据库的连接设置。必须在这一个 project 的sonarRunner
块中进行配置。在命令行上设置的不论什么
Sonar 属性也会应用到这个 project 中。
演示样例 36.3. 全局配置设置
build.gradle
sonarRunner { sonarProperties { property "sonar.host.url", "http://my.server.com" property "sonar.jdbc.url", "jdbc:mysql://my.server.com/sonar" property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver" property "sonar.jdbc.username", "Fred Flintstone" property "sonar.jdbc.password", "very clever" } }
在subprojects
块中,能够配置共享子项目之间的配置。
演示样例 36.4. 共享的配置设置
build.gradle
subprojects { sonarRunner { sonarProperties { property "sonar.sourceEncoding", "UTF-8" } } }
特定项目的信息在相应的 project 的sonarRunner
块中配置。
演示样例 36.5. 个别配置设置
build.gradle
project sonarRunner { sonarProperties { property "sonar.language", "grvy" } } }
对于一个特定的子项目,要跳过 Sonar 分析,能够设置sonarRunner.skipProject
。
默认情况下, Sonar Runner 插件传给project 的main
source
set 将作为生产源文件,传给project 的test
source
sets 将作为測试源文件。
这个过程与project 的源文件夹布局无关。
依据须要。能够加入额外的 source sets。
要分析非 Java 语言编写的代码。请安装对应的Sonar
插件,并对应地设置sonar.project.language
:
演示样例 36.8. 分析非 Java 语言
build.gradle
sonarRunner { sonarProperties { property "sonar.language", "grvy" // set language to Groovy } }
截至 Sonar 3.4,每个项目仅仅能够分析一种语言。只是,在多项目构建中你能够为每个项目分析一种不同的语言。
让我们再具体看看sonarRunner.sonarProperties
{}
块。
正如我们在演示样例中已经看到的, property()
方法同意设置新属性或重写现有的属性。
此外。全部已配置到这一点的属性,包含通过
Gradle 预配置的全部属性。还可通过properties
訪问器进行使用。
在properties
map的条目能够使用常见的
Groovy 语法来读取和写入。
为了方便它们的操作,这些值值仍然使用它们惯用的类型 (File
,List
等)。SonarProperties
块在经过评估后。这些值值被转换为字符串。例如以下所看到的: 集合的值(递归) 转换为以逗号分隔的字符串,其它全部的值通过调用其tostring
()
方法进行转换。
由于sonarProperties
块的评估是惰性的,Gradle
的对象模型的属性能够在块中被安全地引用,而无需操心它们还没有被赋值。
Sonar 属性也能够从命令行中设置,通过设置一个系统属性,名称就像正在考虑中的 Sonar 属性。当处理敏感信息 (比如证件),环境信息。或点对点配置时,这会很实用。
gradle sonarRunner -Dsonar.host.url=http://sonar.mycompany.com -Dsonar.jdbc.password=myPassword -Dsonar.verbose=true
尽管有时当然非常实用,但我们建议在 (版本号控制的)构建脚本中。可以方便地让每一个人都保持大部分的配置。
通过一个系统属性设置的 Sonar 属性值将覆盖构建脚本中设置的不论什么值(相同的属性名称)。
当分析项目的层次结构时,通过系统属性设置的值应用于所分析层次结构的根项目。
依据项目大小,Sonar Runner 可能须要大量的内存。因为这个和其它(主要是隔离)的原因,最好在一个独立的进程中运行Sonar Runner。一旦 Sonar Runner 2.1 公布,将提供这个功能,并由 Sonar Runner 插件採用。
到那时,Sonar Runner 会在 Gradle 主进程中运行。
有关怎样管理这一进程的内存设置,请參阅第 20.1 节,“通过 gradle.properties 配置构建环境"的第 20.1 条”。
Sonar Runner插件向 project 中加入了下面任务。
表 36.4. Sonnar Runner 插件 - 任务
任务名称 | 依赖于 | 类型 | 描写叙述 |
sonarRunner
{ |
- |
sonarRunner
{ |
分析项目层次结构,并将结果存储在 Sonar 数据库。 |