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 客户端组件。相比单独使用 Sonar Runner,Sonar Runner 插件提供了以下便利:
- 自动配置 Sonar Runner
-
可以通过一个正规的 Gradle 任务来执行 Sonar Runner,这使得在任何 Gradle 可用的地方,它都可以用(开发人员构建,CI 服务器等),而无需下载,安装,和维护 Sonar Runner 的安装。
- 通过 Gradle 构建脚本动态配置
-
根据需要,可以利用 Gradle 脚本的所有特性去配置 Sonar Runner。
- 提供了广泛范围的默认配置
-
Gradle 已经有很多 Sonar Runner 成功分析一个项目所需的信息。基于这些信息对 Sonar Runner 进行预配置,减少了许多手动配置的需要。
36.1.
插件状态和兼容性
Sonar Runner 插件是Sonar
插件的继任者。目前它还在孵化中的状态。该插件基于Sonar
Runner 2.0,这使它与Sonar 2.11 或更高的版本相兼容。不同于 Sonar 插件,Sonar Runner 插件与 Sonar 3.4 或更高的版本一起使用时也表现正常。
36.2.
入门
若要开始,请对要分析的项目配置使用 Sonar Runner 插件。
示例 36.1. 配置使用 Sonar Runner 插件
build.gradle
apply plugin: "sonar-runner"
假设一个本地的 Sonar 服务使用开箱即用的设置启动和运行,则不需要进一步的强制性的配置。执行gradle并等待构建完成,然后打开 Sonar Runner 输出结果的底部所指示的网页。你现在应该能够看到分析结果了。
sonarRunner
在执行sonarRunner任务前,所有产生输出以用于
Sonar 分析的需要都需要被执行。通常情况下,它们是编译任务、测试任务和代码覆盖任务。为了满足这些需要,如果应用了java插件,Sonar
Runner 插件将从sonarRunner添加一个对 test 的任务依赖。根据需要,可以添加更多的任务依赖。
36.3.
配置 Sonar Runner
Sonar Runner 插件向 project 添加了一个SonarRunner扩展,它允许通过被称为 Sonar
属性 的键/值对配置 Sonar Runner。一个典型的基线配置包括了Sonar 服务器和数据库的连接设置。
示例 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,有提供另外的默认值。对于一些属性(尤其是服务器和数据库的连接配置),确定留给
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 (如果该目录存在) |
36.4.
分析多项目构建
Sonar Runner 插件能够一次分析整个项目的层次结构。它能够在 Sonar 的 web 界面生成一个层次图,该层次图包含了综合的指标且能够深入到子项目中。分析一个项目的层次结果还可以比单独分析每个项目花费更省时间。
要分析一个项目的层次结构, 需要把 Sonar Runner 插件应用于层次结构的最顶层项目。通常(但不是一定)会是这个 Gradle 构建的根项目。与分析有关的信息作为一个整体,比如服务器和数据库的连接设置,必须在这一个 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。
示例 36.6. 跳过项目分析
build.gradle
project
sonarRunner {
skipProject = true
}
}
36.5.
分析自定义的Source Sets
默认情况下, Sonar Runner 插件传给project 的main source
set 将作为生产源文件,传给project 的test source
sets 将作为测试源文件。这个过程与project 的源目录布局无关。根据需要,可以添加额外的 source sets。
示例 36.7. 分析自定义的Source Sets
build.gradle
sonarRunner {
sonarProperties {
properties["sonar.sources"] += sourceSets.custom.allSource.srcDirs
properties["sonar.tests"] += sourceSets.integTest.allSource.srcDirs
}
}
36.6.
分析非 Java 语言
要分析非 Java 语言编写的代码,请安装相应的Sonar
插件,并相应地设置sonar.project.language :
示例 36.8. 分析非 Java 语言
build.gradle
sonarRunner {
sonarProperties {
property "sonar.language", "grvy" // set language to Groovy
}
}
截至 Sonar 3.4,每个项目只可以分析一种语言。不过,在多项目构建中你可以为每一个项目分析一种不同的语言。
36.7。
更多关于配置 Sonar 的属性
让我们再详细看看sonarRunner.sonarProperties块。正如我们在示例中已经看到的,
{}property()方法允许设置新属性或重写现有的属性。此外,所有已配置到这一点的属性,包括通过
Gradle 预配置的所有属性,还可通过properties访问器进行使用。
在properties map的条目可以使用常见的
Groovy 语法来读取和写入。为了方便它们的操作,这些值值仍然使用它们惯用的类型 (File,List等)。SonarProperties
块在经过评估后,这些值值被转换为字符串,如下所示: 集合的值(递归) 转换为以逗号分隔的字符串,其他所有的值通过调用其tostring方法进行转换。
()
因为sonarProperties块的评估是惰性的,Gradle
的对象模型的属性可以在块中被安全地引用,而无需担心它们还没有被赋值。
36.8.
从命令行设置 Sonar 属性。
Sonar 属性也可以从命令行中设置,通过设置一个系统属性,名称就像正在考虑中的 Sonar 属性。当处理敏感信息 (例如证件),环境信息,或点对点配置时,这会非常有用。
gradle sonarRunner -Dsonar.host.url=http://sonar.mycompany.com -Dsonar.jdbc.password=myPassword -Dsonar.verbose=true
虽然有时当然很有用,但我们建议在 (版本控制的)构建脚本中,能够方便地让每个人都保持大部分的配置。
通过一个系统属性设置的 Sonar 属性值将覆盖构建脚本中设置的任何值(同样的属性名称)。当分析项目的层次结构时,通过系统属性设置的值应用于所分析层次结构的根项目。
36.9. 在一个单独的进程中执行
Sonar Runner
根据项目大小,Sonar Runner 可能需要大量的内存。由于这个和其他(主要是隔离)的原因,最好在一个独立的进程中执行Sonar Runner。一旦 Sonar Runner 2.1 发布,将提供这个功能,并由 Sonar Runner 插件采用。到那时,Sonar Runner 会在 Gradle 主进程中执行。有关如何管理这一进程的内存设置,请参阅第
20.1 节,“通过 gradle.properties 配置构建环境"的第 20.1 条”。
36.10.
任务
Sonar Runner插件向 project 中添加了以下任务。
表 36.4. Sonnar Runner 插件 - 任务
| 任务名称 | 依赖于 | 类型 | 描述 |
sonarRunner |
- |
sonarRunner |
分析项目层次结构,并将结果存储在 Sonar 数据库。 |
Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件的更多相关文章
- Gradle 1.12用户指南翻译——第三十五章. Sonar 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第三十九章. IDEA 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第三十二章. JDepend 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第四十五章. 应用程序插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第三十八章. Eclipse 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第五十二章. Maven 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...
- Gradle 1.12用户指南翻译——第四十四章. 分发插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
随机推荐
- Spark技术内幕: Shuffle详解(三)
前两篇文章写了Shuffle Read的一些实现细节.但是要想彻底理清楚这里边的实现逻辑,还是需要更多篇幅的:本篇开始,将按照Job的执行顺序,来讲解Shuffle.即,结果数据(ShuffleMap ...
- 插件占坑,四大组件动态注册前奏(二) 系统Service的启动流程
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52203903 前言:为什么要了解系统Activity,Service,BroadCas ...
- 即时通讯软件openfire+spark+smack
所以我基本上分为三篇文章来介绍此类软件的开发: 第一篇是关于XMPP 协议是啥,IM 是啥以及一个比较有名的开源实现,该开源实现包括三个部分(Spark.Smack和Openfire): 第二篇讲如何 ...
- mysql数据库连接池使用(二)实现自己的数据库连接池
上一个章节,我们讲了xml文件的解析框架XMLConfiguration的使用,不懂的可以参考 Apache Commons Configuration读取xml配置具体使用. 这个章节主要实现自己的 ...
- 在Android中使用AlarmManager
AlarmManager是Android中的一种系统级别的提醒服务,它会为我们在特定的时刻广播一个指定的Intent.而使用Intent的时候,我们还需要它执行一个动作,如startActivity, ...
- Android开发学习之路--Content Provider之初体验
天气说变就变,马上又变冷了,还好空气不错,阳光也不错,早起上班的车上的人也不多,公司来的同事和昨天一样一样的,可能明天会多一些吧,那就再来学习android吧.学了两个android的组件,这里学习下 ...
- (NO.00005)iOS实现炸弹人游戏(四):游戏数据的初始化(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们初步看了一下MainScene类的初始化方法里都做了神 ...
- Android动画深入分析
动画分类 Android动画可以分3种:View动画,帧动画和属性动画:属性动画为API11的新特性,在低版本是无法直接使用属性动画的,但可以用nineoldAndroids来实现(但是本质还是vii ...
- xpath技术解析xml以及案例模拟用户登录效果
问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xpath就在此情况下产生了--主要是用于快速获取所需的[节点对象]. 在dom4j中如何使用xPath技术 1) ...
- go: 一个通用log模块的实现
在go里面,虽然有log模块,但是该模块提供的功能并不强,譬如就没有我们常用的level log功能,但是自己实现一个log模块也并不困难. 对于log的level,我们定义如下: const ( L ...