使用Java 8,执行gradle sonarRunner
会显示此错误消息。
(sonarQube版本:4.2.1)
java.lang.ArrayIndexOutOfBoundsException: 26721
at org.objectweb.asm.ClassReader.readClass(Unknown Source) [asm-all-3.2.jar:5.0_BETA]
at org.objectweb.asm.ClassReader.accept(Unknown Source) [asm-all-3.2.jar:5.0_BETA]
at org.objectweb.asm.ClassReader.accept(Unknown Source) [asm-all-3.2.jar:5.0_BETA]
at org.sonar.java.bytecode.asm.AsmClassProviderImpl.decoracteAsmClassFromBytecode(AsmClassProviderImpl.java:76) [java-squid-2.0.jar:na]
at org.sonar.java.bytecode.asm.AsmClassProviderImpl.getClass(AsmClassProviderImpl.java:55) [java-squid-2.0.jar:na]
at org.sonar.java.bytecode.asm.AsmClassVisitor.visit(AsmClassVisitor.java:52) [java-squid-2.0.jar:na]
at org.objectweb.asm.ClassReader.accept(Unknown Source) [asm-all-3.2.jar:5.0_BETA]
at org.objectweb.asm.ClassReader.accept(Unknown Source) [asm-all-3.2.jar:5.0_BETA]
```
SonarQube不支持Java 8了吗?我想知道什么时候有支持。
谢谢。
答案 0 :(得分:12)
SonarQube supports Java 8自2014年3月底开始(最初有一些hickups,已在其Java插件的2.2版中修复)。
我不得不卸载Sonar更新中心的PMD和Checkstyle插件,因为它们还没有为Java 8做好准备。声纳自己的规则引擎Squid应该会使这些插件变得多余。
如果您使用Gradle 1.11调用Sonar并希望Jacoco计算代码覆盖率,则必须指定最新的Jacoco版本才能分析Java 8字节码。
这是我用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
}
}
答案 1 :(得分:4)
您的问题有两个方面:
您收到的错误来自下载到客户端并依赖旧版ASM(3.2)的Java Ecosystem插件。 AFAIK Java 8支持从5.0版开始。你和Findbugs和Jacoco会有同样的问题。另请参阅this discussion。
关于SonarQube服务器,您可以启动它,但是当您选择“配置小部件”时它会崩溃,所以我会说不,它还不支持Java 8。
答案 2 :(得分:2)
很快就会得到支持。请参阅http://jira.codehaus.org/browse/SONARJAVA-386。