Ответ 1
SonarQube поддерживает Java 8 с конца марта 2014 года (с некоторыми hickups, которые были исправлены в версии 2.2 его Java-плагина).
Мне пришлось удалить плагины PMD и Checkstyle в центре обновления Sonar, поскольку они не готовы к Java 8. Собственный механизм правильного Sonar Squid должен сделать эти плагины излишними.
Если вы используете Gradle 1.11 для вызова Sonar и хотите, чтобы Jacoco вычислял покрытие кода, вам нужно указать последнюю версию Jacoco для анализа байт-кода Java 8.
Здесь мой script, который делает это при вызове с gradle test jacocoTestReport sonarRunner
:
/** This script is responsible for unit testing and static analysis of the project source code*/
apply plugin: "jacoco"
apply plugin: "sonar-runner"
// Location of the XML unit test and code coverage reports
def testResultsDir = "$buildDir/test-results/" // Use double quotes. Otherwise the $ won't work
jacoco{
// Gradle 1.11 ships with a Jacoco version that doesn't support Java 8
toolVersion = "0.7.0.201403182114"
}
// Call "gradle test jacocoTestReport" to produce a code coverage report at "build/reports/jacoco/test/html/index.html"
test {
jacoco {
def coverageReport = new File(testResultsDir, "jacocoTest.exec")
destinationFile = file(coverageReport)
}
}
// Let SonarQube analyze the project
sonarRunner {
sonarProperties {
property "sonar.projectKey", projectId
property "sonar.projectName", projectName
property "sonar.junit.reportsPath", testResultsDir
// Address of SonarQube server
property "sonar.host.url", "http://localhost:9000"
// SonarQube stores the test results in this database
property "sonar.jdbc.url", "jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true"
property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver"
property "sonar.jdbc.username", "root"
property "sonar.jdbc.password", sonarDBpassword
}
}