Java8项目上的SonarQube给了jacoco一个例外

Java8项目上的SonarQube给了jacoco一个例外,java,sonarqube,jacoco,java-8,Java,Sonarqube,Jacoco,Java 8,我刚下载了最新版本SonarQube 4.3, 然后尝试使用以下工具构建java-8项目: mvn clean install mvn sonar:sonar 这给了我下面的例外 谷歌搜索,我得到的印象是,这是一个早期的问题,应该得到解决 SonarQube 4.3支持java-8吗 或者任何线索,问题是什么 ------------------------------------------------------- T E S T S --------------------

我刚下载了最新版本SonarQube 4.3, 然后尝试使用以下工具构建java-8项目:

  mvn clean install
  mvn sonar:sonar
这给了我下面的例外

谷歌搜索,我得到的印象是,这是一个早期的问题,应该得到解决

SonarQube 4.3支持java-8吗

或者任何线索,问题是什么

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
        at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
        at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
        at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:99)
        at org.jacoco.agent.rt.internal_6effb9e.PreMain.createRuntime(PreMain.java:55)
        at org.jacoco.agent.rt.internal_6effb9e.PreMain.premain(PreMain.java:47)
        ... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
        at java.lang.Class.getField(Class.java:1690)
        at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:136)
        ... 9 more
FATAL ERROR in native method: processing of -javaagent failed
Exception in thread "main"

SonarQube 4.3嵌入了Java插件2.1,而在版本2.2中已经修复。因此,通过将Java插件升级到2.2.1版,应该可以解决您的问题

我从SonarQube邮件列表中得到了丢失的信息。。。 总结如下:

要使Java8 maven build在SonarQube-4.3上运行,请执行以下操作:

  • 安装sonarqube-4.3并启动服务器

  • 登录到web gui=>Settings=>Update Center=>Plugins Updates=>Java=>单击“升级到2.2.1”

请等待一分钟左右,等待升级完成。。。然后关闭并重新启动sonarqube。 回到升级中心,验证您是否有插件:Java2.2.1

  • 要在Sonar中获得代码覆盖率,您现在需要使用以下命令进行构建:

    mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install 
    mvn sonar:sonar
    
参考:


就这样。

我们也有同样的问题。我们所做的是重新安装Sonarqube4.3,其中已经安装了Java8。然后对声纳进行分析。如果您之前已经安装了sonar/Java7并对其进行了分析,sonar似乎安装了一些导致这些故障的插件。如果您只重新安装sonar和java 8(不要删除mysql数据库等,所以历史记录是完整的)-重新运行分析,它似乎可以解决插件的问题。

当mvn使用JDK 1.8构建java 1.7项目时,我也遇到了同样的错误。解决方案很简单:我将jacoco插件版本更改为更新版本:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.6.201602180812</version>

org.jacoco
jacocomaven插件
0.7.6.201602180812

(项目之前使用的是0.6.3.201306030806版。)

在java 11中,我遇到了这个问题,我修复了在gradle属性中添加这个问题:

jacoco {
  toolVersion = "0.8.4"
}

如果您使用gradle运行jacoco,他们会将jacoco更新为最新版本。 我也面临着类似的问题,在下面的修改后得到了修复

Java11和Gradle

jacoco {
    toolVersion = "0.8.4"
}

设置
$JAVA\u HOME
为我解决了这个问题。

我做了以下更改来解决这个问题。我使用了两个步骤,第一个步骤是更新最新版本的
jacoco
及其
工具版本
,请在下面检查一下

    classpath "com.dicedmelon.gradle:jacoco-android:0.1.4"
工具版本
如下

jacoco {
    toolVersion = "0.8.4"

}
请参考链接了解更多信息

现在检查第二步,我们在
testOption
中使用
excludes=['jdk.internal.*']
,如下所示

 testOptions {
        unitTests.all {
            jacoco {
                includeNoLocationClasses = true
                excludes = ['jdk.internal.*']

            }
        }
    }

欲了解更多信息,请查看链接

Thanx,它修复了上述异常。尽管如此,仍然存在一个问题:sonar gui没有显示任何单元测试覆盖率,只显示了%应该在哪里的破折号。有什么线索吗?我还面临Java 8的问题(SonarQube 4.3和Java插件升级到2.2.1),这是由以下原因引起的:org.sonar.api.utils.sonar异常:目录包含属于不同软件包的文件:E:\workspaceCDS\my\package请修复您的sourccode或使用sonar.skipPackageDesign=true继续分析。在org.sonar.plugins.java.bridges.ResourceIndex.loadSquidFilesAndPackages(ResourceIndex.java:94)上,这不是一个问题。我在某个地方读到,如果你将所有maven目标放在一个mvn命令中,可能会有问题,所以如果你使用Jenkins,我想你应该将构建命令放在一个带有“Execute shell”的自由式项目中,而不是一个专业项目。谢谢你,先生,你节省了数十亿美元!:)对于那些使用Jenkins的人,可以在那里指定Java版本。如果不是,则采用默认值。这对我很有效。类似地,我不得不使用JDK8将我的版本从
0.8.2
升级到
0.8.2
,将jacoco插件升级到最新版本修复了我的问题。