You may wish to use the new Sonar Runner Plugin instead of this plugin. In particular, only the Sonar Runner plugin supports Sonar 3.4 and higher.
このプラグインの代わりに、新しくできたSonnar Runnerを使いたくなる場面もあるかもしれません。 特に、Sonar3.4以上をサポートしているのはSonar Runnerプラグインだけです。
The Sonar plugin provides integration with Sonar,
a web-based platform for monitoring code quality. The plugin adds a sonarAnalyze
task
that analyzes the project to which the plugin is applied, as well as its subprojects. The results are stored in
the Sonar database. The plugin is based on the Sonar Runner
and requires Sonar 2.11 or higher.
Sonarプラグインは、コード品質モニタリングのためのWebベースのプラットフォームであるSonarとの統合機能を提供します。
プラグインにより追加されるsonarAnalyze
タスクは、プラグインが適用されたプロジェクト、およびそのサブプロジェクトを解析することができます。結果はSonarデータベースに格納されます。
このプラグインはベースにSonar Runnerが使われていて、Sonar 2.11以上を必要とします。
The sonarAnalyze
task is a standalone task that needs to be executed explicitly
and doesn't depend on any other tasks. Apart from source code, the task also analyzes class files
and test result files (if available). For best results, it is therefore recommended to run a full
build before the analysis. In a typical setup, analysis would be performed once per day on a build server.
sonarAnalyze
タスクは明示的に実行する必要のあるスタンドアロンタスクで、
他のいかなるタスクにも依存しません。
ソースコードだけでなく、タスクはクラスファイルと(可能であれば)テスト結果ファイルも解析します。
そのため、最大限の結果を得るために、解析の前にフルビルドを実行することが推奨されます。
典型的なセットアップでは、解析はビルドサーバー上で1日1回実行されるようにします。
At a minimum, the Sonar plugin has to be applied to the project.
必要最小限、Sonarプラグインがプロジェクトに適用されている必要があります。
Unless Sonar is run locally and with default settings, it is necessary to configure connection settings for the Sonar server and database.
Sonarがデフォルト設定でローカル実行されるのでなければ、Sonarサーバーとデータベースへの接続設定も必要になります。
例35.2 Sonar接続設定のコンフィグレーション
build.gradle
sonar { server { url = "http://my.server.com" } database { url = "jdbc:mysql://my.server.com/sonar" driverClassName = "com.mysql.jdbc.Driver" username = "Fred Flintstone" password = "very clever" } }
Alternatively, some or all connection settings can be set from the command line (see 「コマンドラインでSonarの設定を行う Configuring Sonar Settings from the Command Line」).
代わりに、いくつかの、または全ての接続設定をコマンドラインで設定することもできます(「コマンドラインでSonarの設定を行う Configuring Sonar Settings from the Command Line」参照)。Project settings determine how the project is going to be analyzed. The default configuration works well for analyzing standard Java projects and can be customized in many ways.
プロジェクト設定によって、プロジェクトをどのように解析するのかが決まります。 標準的なJavaプロジェクトに対してはデフォルト設定で事が足りますが、さまざまな方法でカスタマイズも可能です。
例35.3 Sonarプロジェクト設定のコンフィグレーション
build.gradle
sonar {
project {
coberturaReportPath = file("$buildDir/cobertura.xml")
}
}
The sonar
, server
, database
, and project
blocks in the examples above configure objects of type SonarRootModel
,
SonarServer
, SonarDatabase
,
and SonarProject
, respectively. See their API documentation for further information.
サンプルのsonar
、server
、database
、およびproject
ブロックは、それぞれコンフィグレーションオブジェクト
SonarRootModel
、
SonarServer
、
SonarDatabase
、
およびSonarProject
に対応します。
詳細はAPIドキュメントを参照してください。
The Sonar plugin is capable of analyzing a whole project hierarchy at once. This yields a hierarchical view in the Sonar web interface with aggregated metrics and the ability to drill down into subprojects. It is also faster than analyzing each project separately.
Sonarプラグインはプロジェクト階層全体を一度に解析する機能をもちます。 集約されたメトリクスとサブプロジェクトへのドリルダウン機能を含む階層ビューをSonarのWebインターフェースに生成でき、 個別のプロジェクトごとに解析を行うよりも高速でもあります。
To analyze a project hierarchy, the Sonar plugin needs to be applied to the top-most project of the hierarchy.
Typically (but not necessarily) this will be the root project. The sonar
block
in that project configures an object of type SonarRootModel
.
It holds all global configuration, most importantly server and database connection settings.
プロジェクト階層を解析するには、Sonarプラグインを階層の最上位のプロジェクトに適用する必要があります。
これは、典型的には(必須ではないですが)ルートプロジェクトです。
そのプロジェクトのsonar
ブロックが
SonarRootModel
型のオブジェクトを構成します。
これはすべてのグローバルコンフィグレーションを保持しますが、
最も重要なのはサーバーとデータベース接続設定です。
例35.4 マルチプロジェクトビルドにおけるグローバルコンフィグレーション
build.gradle
apply plugin: "sonar" sonar { server { url = "http://my.server.com" } database { url = "jdbc:mysql://my.server.com/sonar" driverClassName = "com.mysql.jdbc.Driver" username = "Fred Flintstone" password = "very clever" } }
Each project in the hierarchy has its own project configuration. Common values can be set from a parent build script.
階層の各プロジェクトは独自のプロジェクトコンフィグレーションを持ちます。 共通の値は親のビルドスクリプトから設定可能です。
例35.5 マルチプロジェクトビルドにおける共通のプロジェクトコンフィグレーション
build.gradle
subprojects {
sonar {
project {
sourceEncoding = "UTF-8"
}
}
}
The sonar
block in a subproject configures an object of type SonarProjectModel
.
サブプロジェクトのsonar
ブロックは
SonarProjectModel
型のオブジェクトを構成します.
Projects can also be configured individually. For example, setting the skip
property to true
prevents a project (and its subprojects) from being analyzed. Skipped projects will not be displayed in the Sonar web interface.
プロジェクトを個別に構成することもできます。
例えば、skip
プロパティをtrue
に設定することで、
プロジェクト(およびそのサブプロジェクト)を解析対象から除外することができます。
スキップされたプロジェクトはSonar Webインターフェースには表示されません。
例35.6 マルチプロジェクトビルドにおけるプロジェクト個別コンフィグレーション
build.gradle
project(":project1") {
sonar {
project {
skip = true
}
}
}
Another typical per-project configuration is the programming language to be analyzed. Note that Sonar can only analyze one language per project.
プロジェクト単位のコンフィグレーションでもう一つ典型的なのは、解析対象のプログラム言語です。 Sonarはプロジェクトあたり一つの言語しか解析できないことに注意してください。
例35.7 解析対象の言語のコンフィグレーション
build.gradle
project(":project2") { sonar { project { language = "groovy" } } }
When setting only a single property at a time, the equivalent property syntax is more succinct:
一度に単一のプロパティしか設定しないときは、等価なプロパティの文法はより簡潔になります:
By default, the Sonar plugin will analyze the production sources in the main
source set and
the test sources in the test
source set. This works independent of the project's source directory layout.
Additional source sets can be added as needed.
デフォルトでは、Sonarプラグインはmain
ソースセットのプロダクションソースと、
test
ソースセットのテストソースを解析します。
これはプロジェクトのソースディレクトリレイアウトとは独立して動作します。
ソースセットは必要に応じて追加できます。
例35.9 カスタムソースセットの解析
build.gradle
sonar.project { sourceDirs += sourceSets.custom.allSource.srcDirs testDirs += sourceSets.integTest.allSource.srcDirs }
To analyze code written in a language other than Java, install the corresponding
Sonar plugin, and set
sonar.project.language
accordingly:
Java以外の言語で書かれたコードを解析するには、対応するSonarプラグインをインストールして、次のようにsonar.project.language
を設定してください。
As of Sonar 3.4, only one language per project can be analyzed. You can, however, set a different language for each project in a multi-project build.
Sonarでは、バージョン3.4現在、一プロジェクトにつき一つの言語の解析しかできません。しかし、マルチプロジェクトで、それぞれのプロジェクトに異なる言語を設定することはできます。
Eventually, most configuration is passed to the Sonar code analyzer in the form of key-value pairs known as Sonar properties.
The SonarProperty
annotations in the API documentation show how properties
of the plugin's object model get mapped to the corresponding Sonar properties. The Sonar plugin offers hooks to post-process Sonar
properties before they get passed to the code analyzer. The same hooks can be used to add additional properties which aren't covered
by the plugin's object model.
最終的には、コンフィグレーションのほとんどは、
Sonarプロパティとして知られるkey-valueペアの形でSonarコードアナライザに渡されます。
プラグインのオブジェクトモデルのプロパティが対応するSonarプロパティにどのようにしてマップされるかは、
APIドキュメントのSonarProperty
アノテーションが示してます。
Sonarプラグインは、Sonarプロパティがコードアナライザに渡される前の後処理のためのフックを提供します。
このフックは、プラグインのオブジェクトモデルがカバーしていないプロパティを追加するためにも利用できます。
For global Sonar properties, use the withGlobalProperties
hook on SonarRootModel
:
グローバルSonarプロパティに対しては、SonarRootModel
のwithGlobalProperties
フックを利用してください:
例35.11 カスタムグローバルプロパティ設定
build.gradle
sonar.withGlobalProperties { props -> props["some.global.property"] = "some value" // non-String values are automatically converted to Strings props["other.global.property"] = ["foo", "bar", "baz"] }
For per-project Sonar properties, use the withProjectProperties
hook on SonarProject
:
プロジェクト毎のSonarプロパティに対しては、SonarProject
のwithProjectProperties
フックを利用してください:
例35.12 カスタムプロジェクトプロパティ設定
build.gradle
sonar.project.withProjectProperties { props -> props["some.project.property"] = "some value" // non-String values are automatically converted to Strings props["other.project.property"] = ["foo", "bar", "baz"] }
A list of available Sonar properties can be found in the Sonar documentation.
Note that for most of these properties, the Sonar plugin's object model has an equivalent property, and it isn't necessary to use a withGlobalProperties
or withProjectProperties
hook. For configuring a third-party Sonar plugin, consult the plugin's documentation.
使用できるSonarプロパティはSonarのドキュメントで調べることができます。
ただし、これらのプロパティのほとんどはプラグインのオブジェクトモデルに対応するプロパティがあり、withGlobalProperties
やwithProjectProperties
フックを使って設定する必要はありません。
サードパーティのSonarプラグインに対しては、それらのドキュメントを参照してください。
The following properties can alternatively be set from the command line, as task parameters of the sonarAnalyze
task.
A task parameter will override any corresponding value set in the build script.
次に示すプロパティは、sonarAnalyze
タスクのパラメーターとしてコマンドラインからでも設定できます。
タスクパラメーターは、ビルドスクリプト内の対応する値を全て上書きします。
server.url
database.url
database.driverClassName
database.username
database.password
showSql
showSqlResults
verbose
forceAnalysis
Here is a complete example:
以下に使用例を示します。
gradle sonarAnalyze --server.url=http://sonar.mycompany.com --database.password=myPassword --verbose
If you need to set other properties from the command line, you can use system properties to do so:
他の値をコマンドラインから設定する必要がある場合は、システムプロパティが使用できます。
例35.13 カスタムのコマンドラインプロパティを実装する
build.gradle
sonar.project { language = System.getProperty("sonar.language", "java") }
However, keep in mind that it is usually best to keep configuration in the build script and under source control.
ただ、たいていの場合は設定値をビルドスクリプトに格納し、ソースコード管理システムで管理するのが一番良い方法だということは頭に留めておいてください。
The Sonar plugin adds the following tasks to the project.
Sonarプラグインはプロジェクトに以下のタスクを追加します。
表35.1 Sonarプラグイン - タスク Sonar plugin - tasks
タスク名 Task name | 依存先 Depends on | タイプ Type | 説明 Description |
sonarAnalyze |
- | SonarAnalyze |
プロジェクト階層全体を解析し、結果をSonarデータベースに格納。 Analyzes a project hierarchy and stores the results in the Sonar database. |