带有 sonar-runner 2.4 的 Sonarqube 5.1.2 不显示 Groovy cobertura 报告
Sonarqube 5.1.2 with sonar-runner 2.4 doesnt display Groovy cobertura report
我有以下设置:
- Sonarqube v5.1.2
- Sonar Runner v2.4
- Sonarqube v1.6.3 的 Cobertura 插件
- Groovy Sonarqube v1.2 插件
所有版本都是最新的。
我的项目结构如下:
ParentProject
|-sonar-project.properties
|- Grails Project A
| |-sonar-project.properties
ParentProject 文件夹 sonar-project.properties 包含以下内容:
sonar.projectKey=ParentProject
sonar.projectName=Parent Project SONARQUBE
sonar.projectVersion=1.0
sonar.scm.url=scm:svn:https://server/svn/nv/frontend/grails/trunk
sonar.scm.provider=svn
sonar.language=grvy
sonar.core.codeCoveragePlugin=cobertura
sonar.grvy.coveragePlugin=cobertura
sonar.groovy.cobertura.reportPath=target/test-reports/cobertura/coverage.xml
sonar.cobertura.reportPath=target/test-reports/cobertura/coverage.xml
sonar.sourceEncoding=UTF-8
sonar.web.file.suffixes=gsp
sonar.modules= ProjectA
# Settings for servicemodel#
ProjectA.sonar.projectBaseDir=./ProjectA
在 ProjectA 中,我们有以下声纳-project.properties:
sonar.modules = projectA-groovymodule, projectA-javascriptmodule, projectA-webmodule
projectA-groovymodule.sonar.projectBaseDir=.
projectA-groovymodule.sonar.language=grvy
projectA-groovymodule.sonar.sources=grails-app/services,grails-app/controllers,grails-app/domain,grails-app/taglib,src/groovy
projectA-groovymodule.sonar.tests=test/unit,test/integration
projectA-groovymodule.sonar.junit.reportsPath=target/test-reports
projectA-groovymodule.sonar.cobertura.reportPath = target/test-reports/cobertura/coverage.xml
projectA-groovymodule.sonar.groovy.cobertura.reportPath=target/test-reports/cobertura/coverage.xml
projectA-groovymodule.sonar.grvy.coveragePlugin=cobertura
projectA-javascriptmodule.sonar.projectBaseDir=.
projectA-javascriptmodule.sonar.language=js
projectA-javascriptmodule.sonar.sources=grails-app, web-app/js
projectA-javascriptmodule.sonar.exclusions=web-app/js/lib/**/*
projectA-webmodule.sonar.projectBaseDir=.
projectA-webmodule.sonar.language=web
projectA-webmodule.sonar.sources=grails-app/views
我可以确认 coverage.xml 已经生成并且在此处指定的文件夹中可用。
sonar-runner输出结果如下:
D:\Build\ParentProject>sonar-runner
D:\Apps\sonar-runner-2.4
SonarQube Runner 2.4
Java 1.7.0_51 Oracle Corporation (64-bit)
Windows Server 2008 R2 6.1 amd64
INFO: Runner configuration file: D:\Apps\sonar-runner-2.4\conf\sonar-runner.properties
INFO: Project configuration file: D:\Build\ParentProject\sonar-project.properties
INFO: Default locale: "en_EN", source code encoding: "UTF-8"
INFO: Work directory: D:\Build\ParentProject\.\.sonar
INFO: SonarQube Server 5.1.2
16:05:40.180 INFO - Load global repositories
16:05:40.644 INFO - Load global repositories (done) | time=470ms
16:05:40.689 INFO - Server id: 20150930161227
16:05:40.696 INFO - User cache: d:\gebruikers\user\.sonar\cache
16:05:40.888 INFO - Install plugins
16:05:43.829 INFO - Install JDBC driver
16:05:44.278 INFO - Create JDBC datasource for jdbc:jtds:sqlserver://dbserver:port/db;instance=instance;SelectMethod=Cursor
16:05:48.516 INFO - Initializing Hibernate
16:05:56.529 INFO - Load project repositories
16:05:57.659 INFO - Load project repositories (done) | time=1130ms
16:05:57.822 INFO - Load project settings
16:05:59.033 INFO - Load technical debt model
16:05:59.085 INFO - Apply project exclusions
16:06:01.353 INFO - ------------- Scan projectA-groovymodule
16:06:01.360 INFO - Load module settings
16:06:01.731 INFO - Language is forced to grvy
16:06:01.734 INFO - Load rules
16:06:03.153 INFO - Base dir: D:\Build\ParentProject\ProjectA
16:06:03.156 INFO - Working dir: D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule
16:06:03.158 INFO - Source paths: grails-app/services, grails-app/controllers, grails-app/domain, grails-app/taglib, src/groovy
16:06:03.159 INFO - Test paths: test/unit, test/integration
16:06:03.160 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:03.161 INFO - Index files
16:06:03.179 INFO - Excluded sources:
16:06:03.181 INFO - web-app/js/jquery/**
16:06:03.314 INFO - 18 files indexed
16:06:03.315 INFO - 0 files ignored because of inclusion/exclusion patterns
16:06:03.648 INFO - Quality profile for grvy: profile
16:06:04.398 INFO - Sensor Lines Sensor
16:06:04.512 INFO - Sensor Lines Sensor (done) | time=114ms
16:06:04.513 INFO - Sensor QProfileSensor
16:06:04.522 INFO - Sensor QProfileSensor (done) | time=9ms
16:06:04.525 INFO - Sensor InitialOpenIssuesSensor
16:06:04.682 INFO - Sensor InitialOpenIssuesSensor (done) | time=157ms
16:06:04.683 INFO - Sensor ProjectLinksSensor
16:06:04.696 INFO - Sensor ProjectLinksSensor (done) | time=13ms
16:06:04.697 INFO - Sensor VersionEventsSensor
16:06:04.716 INFO - Sensor VersionEventsSensor (done) | time=19ms
16:06:04.717 INFO - Sensor CodeNarc
16:06:04.718 INFO - Executing CodeNarc
16:06:05.580 INFO - Loaded properties file in 67ms; 346 rules
16:06:05.641 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:07.175 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:09.625 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:11.759 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report1.xml] created.
CodeNarc completed: (p1=0; p2=2; p3=2) 4140ms
16:06:11.764 INFO - Loaded properties file in 1ms; 346 rules
16:06:11.765 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:11.869 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:15.067 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:17.707 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report2.xml] created.
CodeNarc completed: (p1=0; p2=17; p3=13) 3298ms
16:06:17.710 INFO - Loaded properties file in 1ms; 346 rules
16:06:17.711 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:17.826 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:17.837 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:18.969 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report3.xml] created.
CodeNarc completed: (p1=0; p2=0; p3=0) 127ms
16:06:18.972 INFO - Loaded properties file in 1ms; 346 rules
16:06:18.973 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:19.040 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:19.167 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:19.532 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report4.xml] created.
CodeNarc completed: (p1=0; p2=0; p3=2) 195ms
16:06:19.537 INFO - Loaded properties file in 1ms; 346 rules
16:06:19.540 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:19.586 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:19.774 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:20.092 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report5.xml] created.
CodeNarc completed: (p1=0; p2=4; p3=38) 233ms
16:06:20.765 INFO - Sensor CodeNarc (done) | time=16048ms
16:06:20.766 INFO - Sensor GroovySensor
16:06:21.158 INFO - GMetrics completed: 237ms
16:06:21.203 INFO - Sensor GroovySensor (done) | time=437ms
16:06:21.204 INFO - Sensor Groovy CoberturaSensor
16:06:21.205 INFO - Analyzing Cobertura report: target/test-reports/cobertura/coverage.xml
16:06:21.377 INFO - Sensor Groovy CoberturaSensor (done) | time=173ms
16:06:21.378 INFO - Sensor SCM Sensor
16:06:21.414 INFO - Sensor SCM Sensor (done) | time=36ms
16:06:21.415 INFO - Sensor GroovySurefireSensor
16:06:21.417 INFO - parsing D:\Build\ParentProject\ProjectA\target\test-reports
16:06:21.418 INFO - Sensor GroovySurefireSensor (done) | time=3ms
16:06:21.419 INFO - Sensor CPD Sensor
16:06:21.420 INFO - DefaultCpdEngine is used for grvy
16:06:21.421 INFO - Cross-project analysis enabled
16:06:21.760 INFO - Sensor CPD Sensor (done) | time=341ms
16:06:21.769 INFO - No quality gate is configured.
16:06:21.853 INFO - Compare to previous analysis (2015-10-01)
16:06:21.861 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:21.864 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:22.556 INFO - Execute decorators...
16:06:24.684 INFO - ------------- Scan ProjectA-javascriptmodule
16:06:24.686 INFO - Load module settings
16:06:24.727 INFO - Language is forced to js
16:06:24.744 INFO - Base dir: D:\Build\ParentProject\ProjectA
16:06:24.745 INFO - Working dir: D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-javascriptmodule
16:06:24.746 INFO - Source paths: grails-app, web-app/js
16:06:24.747 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:24.748 INFO - Index files
16:06:24.749 INFO - Excluded sources:
16:06:24.750 INFO - web-app/js/lib/**/*
16:06:24.815 INFO - 9 files indexed
16:06:24.816 INFO - 3 files ignored because of inclusion/exclusion patterns
16:06:24.903 INFO - Quality profile for js: ParentProject
16:06:24.948 INFO - Sensor Lines Sensor
16:06:24.952 INFO - Sensor Lines Sensor (done) | time=4ms
16:06:24.953 INFO - Sensor QProfileSensor
16:06:24.954 INFO - Sensor QProfileSensor (done) | time=1ms
16:06:24.954 INFO - Sensor InitialOpenIssuesSensor
16:06:25.024 INFO - Sensor InitialOpenIssuesSensor (done) | time=70ms
16:06:25.031 INFO - Sensor ProjectLinksSensor
16:06:25.040 INFO - Sensor ProjectLinksSensor (done) | time=9ms
16:06:25.043 INFO - Sensor VersionEventsSensor
16:06:25.096 INFO - Sensor VersionEventsSensor (done) | time=53ms
16:06:25.097 INFO - Sensor JavaScriptSquidSensor
16:06:25.101 INFO - 9 source files to be analyzed
16:06:26.722 INFO - Sensor JavaScriptSquidSensor (done) | time=1625ms
16:06:26.723 INFO - 9/9 source files have been analyzed
16:06:26.724 INFO - Sensor SCM Sensor
16:06:26.732 INFO - Sensor SCM Sensor (done) | time=8ms
16:06:26.733 INFO - Sensor org.sonar.plugins.javascript.lcov.UTCoverageSensor@4d2f36b2
16:06:26.733 INFO - Sensor org.sonar.plugins.javascript.lcov.UTCoverageSensor@4d2f36b2 (done) | time=0ms
16:06:26.734 INFO - Sensor org.sonar.plugins.javascript.lcov.ITCoverageSensor@56b007b4
16:06:26.735 INFO - Sensor org.sonar.plugins.javascript.lcov.ITCoverageSensor@56b007b4 (done) | time=1ms
16:06:26.735 INFO - Sensor CPD Sensor
16:06:26.736 INFO - DefaultCpdEngine is used for js
16:06:26.736 INFO - Cross-project analysis enabled
16:06:27.151 INFO - Sensor CPD Sensor (done) | time=416ms
16:06:27.153 INFO - No quality gate is configured.
16:06:27.159 INFO - Compare to previous analysis (2015-10-01)
16:06:27.161 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:27.163 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:27.518 INFO - Execute decorators...
16:06:27.916 INFO - ------------- Scan ProjectA-webmodule
16:06:27.918 INFO - Load module settings
16:06:27.949 INFO - Language is forced to web
16:06:27.968 INFO - Base dir: D:\Build\ParentProject\ProjectA
16:06:27.969 INFO - Working dir: D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-webmodule
16:06:27.970 INFO - Source paths: grails-app/views
16:06:27.970 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:27.971 INFO - Index files
16:06:27.972 INFO - Excluded sources:
16:06:27.973 INFO - web-app/js/jquery/**
16:06:28.027 INFO - 28 files indexed
16:06:28.028 INFO - 0 files ignored because of inclusion/exclusion patterns
16:06:28.273 INFO - Quality profile for web: ParentProject
16:06:28.306 INFO - Sensor Lines Sensor
16:06:28.312 INFO - Sensor Lines Sensor (done) | time=6ms
16:06:28.312 INFO - Sensor QProfileSensor
16:06:28.313 INFO - Sensor QProfileSensor (done) | time=1ms
16:06:28.314 INFO - Sensor InitialOpenIssuesSensor
16:06:28.409 INFO - Sensor InitialOpenIssuesSensor (done) | time=95ms
16:06:28.410 INFO - Sensor ProjectLinksSensor
16:06:28.413 INFO - Sensor ProjectLinksSensor (done) | time=3ms
16:06:28.414 INFO - Sensor VersionEventsSensor
16:06:28.424 INFO - Sensor VersionEventsSensor (done) | time=10ms
16:06:28.424 INFO - Sensor WebSensor
16:06:28.722 INFO - Sensor WebSensor (done) | time=298ms
16:06:28.723 INFO - Sensor SCM Sensor
16:06:28.738 INFO - Sensor SCM Sensor (done) | time=15ms
16:06:28.739 INFO - Sensor CPD Sensor
16:06:28.740 INFO - DefaultCpdEngine is used for web
16:06:28.740 INFO - Cross-project analysis enabled
16:06:29.201 INFO - Sensor CPD Sensor (done) | time=462ms
16:06:29.203 INFO - No quality gate is configured.
16:06:29.207 INFO - Compare to previous analysis (2015-10-01)
16:06:29.209 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:29.211 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:29.522 INFO - Execute decorators...
16:06:31.389 INFO - ------------- Scan ProjectA
16:06:31.391 INFO - Load module settings
16:06:31.440 INFO - Base dir: D:\Build\ParentProject\ProjectA
16:06:31.441 INFO - Working dir: D:\Build\ParentProject\.sonar\ParentProject_ProjectA
16:06:31.442 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:31.474 INFO - Sensor Lines Sensor
16:06:31.474 INFO - Sensor Lines Sensor (done) | time=0ms
16:06:31.475 INFO - Sensor InitialOpenIssuesSensor
16:06:31.513 INFO - Sensor InitialOpenIssuesSensor (done) | time=38ms
16:06:31.514 INFO - Sensor ProjectLinksSensor
16:06:31.517 INFO - Sensor ProjectLinksSensor (done) | time=3ms
16:06:31.518 INFO - Sensor VersionEventsSensor
16:06:31.528 INFO - Sensor VersionEventsSensor (done) | time=10ms
16:06:31.529 INFO - Sensor SCM Sensor
16:06:31.530 INFO - Sensor SCM Sensor (done) | time=1ms
16:06:31.530 INFO - Sensor CPD Sensor
16:06:31.531 INFO - Sensor CPD Sensor (done) | time=1ms
16:06:31.532 INFO - No quality gate is configured.
16:06:31.537 INFO - Compare to previous analysis (2015-10-01)
16:06:31.538 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:31.540 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:31.808 INFO - Execute decorators...
16:06:31.932 INFO - ------------- Scan ParentProject SonarQube Runner
16:06:31.934 INFO - Load module settings
16:06:31.985 INFO - Base dir: D:\Build\ParentProject
16:06:31.986 INFO - Working dir: D:\Build\ParentProject\.sonar
16:06:31.986 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:32.020 INFO - Sensor Lines Sensor
16:06:32.021 INFO - Sensor Lines Sensor (done) | time=1ms
16:06:32.021 INFO - Sensor InitialOpenIssuesSensor
16:06:32.062 INFO - Sensor InitialOpenIssuesSensor (done) | time=41ms
16:06:32.063 INFO - Sensor ProjectLinksSensor
16:06:32.067 INFO - Sensor ProjectLinksSensor (done) | time=4ms
16:06:32.067 INFO - Sensor VersionEventsSensor
16:06:32.077 INFO - Sensor VersionEventsSensor (done) | time=10ms
16:06:32.078 INFO - Sensor SCM Sensor
16:06:32.078 INFO - Sensor SCM Sensor (done) | time=0ms
16:06:32.079 INFO - Sensor CPD Sensor
16:06:32.079 INFO - Sensor CPD Sensor (done) | time=0ms
16:06:32.081 INFO - No quality gate is configured.
16:06:32.086 INFO - Compare to previous analysis (2015-10-01)
16:06:32.088 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:32.090 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:32.280 INFO - Execute decorators...
16:06:32.437 INFO - Store results in database
16:06:34.455 INFO - Analysis reports generated in 269ms, dir size=85 KB
16:06:34.762 INFO - Analysis reports compressed in 305ms, zip size=57 KB
16:06:35.137 INFO - Analysis reports sent to server in 374ms
16:06:35.138 INFO - ANALYSIS SUCCESSFUL, you can browse http://server/dashboard/index/ParentProject
16:06:35.139 INFO - Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report.
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
Total time: 56.500s
Final Memory: 73M/1274M
INFO: ------------------------------------------------------------------------
没有抛出任何错误,根据日志,找到并读取了 cobertura 报告文件。但是,在 SonarQube 屏幕中,覆盖部分是空的。
任何人都可以提供任何帮助吗?
****更新****:
Coverage.xml 内容(截断):
<coverage line-rate="0.1625615763546798" branch-rate="0.034403669724770644" lines-covered="33" lines-valid="203" branches-covered="15" branches-valid="436" complexity="0.0" version="2.0.3" timestamp="1444086827204">
<sources>
<source>
D:/Build/ParentProject/grails-app/services
</source>
<source>
D:/Build/ParentProject/src/groovy
</source>
<source>
D:/Build/ParentProject/grails-app/taglib
</source>
<source>
D:/Build/ParentProject/grails-app/controllers
</source>
</sources>
<packages>
<package name="" line-rate="0.5" branch-rate="0.0" complexity="0.0">
<classes>
<class name="GrailsMelodyConfig" filename="GrailsMelodyConfig.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods>
<method name="run" signature="()Ljava/lang/Object;" line-rate="1.0" branch-rate="1.0">
<lines>
<line number="24" hits="1" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="24" hits="1" branch="false"/>
</lines>
</class>
<class name="HelpContextFilters" filename="HelpContextFilters.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods/>
<lines/>
</class>
<class name="Filters" filename="Filters.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods/>
<lines/>
</class>
<class name="Filters$_closure1" filename="Filters.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="1.0" branch-rate="1.0">
<lines>
<line number="5" hits="1" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="5" hits="1" branch="false"/>
</lines>
</class>
<class name="Filters$_closure1$_closure2" filename="Filters.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="1.0" branch-rate="1.0">
<lines>
<line number="6" hits="1" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="6" hits="1" branch="false"/>
</lines>
</class>
<class name="Filters$_closure1$_closure2$_closure3" filename="Filters.groovy" line-rate="0.0" branch-rate="0.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="0.0" branch-rate="0.0">
<lines>
<line number="7" hits="0" branch="true" condition-coverage="0% (0/2)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="8" hits="0" branch="true" condition-coverage="0% (0/4)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
<condition number="1" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="9" hits="0" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="7" hits="0" branch="true" condition-coverage="0% (0/2)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="8" hits="0" branch="true" condition-coverage="0% (0/4)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
<condition number="1" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="9" hits="0" branch="false"/>
</lines>
</class>
</classes>
</package>
<package name="com" line-rate="0.0" branch-rate="0.0" complexity="0.0">
<classes>
<class name="com.CustomHtmlTagLib" filename="com/CustomHtmlTagLib.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods/>
<lines/>
</class>
<class name="com.CustomHtmlTagLib$_closure1" filename="com/CustomHtmlTagLib.groovy" line-rate="0.0" branch-rate="0.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="0.0" branch-rate="0.0">
<lines>
<line number="16" hits="0" branch="false"/>
<line number="18" hits="0" branch="true" condition-coverage="0% (0/4)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
<condition number="1" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="19" hits="0" branch="false"/>
<line number="21" hits="0" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="16" hits="0" branch="false"/>
<line number="18" hits="0" branch="true" condition-coverage="0% (0/4)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
<condition number="1" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="19" hits="0" branch="false"/>
<line number="21" hits="0" branch="false"/>
</lines>
</class>
<class name="com.CustomHtmlTagLib$_closure2" filename="com/CustomHtmlTagLib.groovy" line-rate="0.0" branch-rate="1.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="0.0" branch-rate="1.0">
<lines>
<line number="26" hits="0" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="26" hits="0" branch="false"/>
</lines>
</class>
</classes>
</package>
... TRUNCATED ...
</packages>
</coverage>
上述问题终于有了答案。在这里张贴,以便对其他人有所帮助。
在 coverage.xml 中,对于某些源文件,行号被评估为“0”,如下所示:
<line number="0" hits="0" branch="true" condition-coverage="33% (1/3)">
<conditions>
<condition number="0" type="switch" coverage="33%"/>
</conditions>
</line>
有两种解决方案可以解决同样的问题:
- 降级用于生成
coverage.xml 并检查 coverage.xml 是否仍然生成上述内容
行
或
从BuildConfig.groovy中的覆盖范围中排除文件
(因为我使用的是 Grails 应用程序):
覆盖率{
排除 = [ "FileA*", "FileB*", "**/package/*"]
}
更多信息:
- http://dublintech.blogspot.nl/2015/06/problems-with-cobertura-and-sonar-51.html
- http://sonarqube-archive.15.x6.nabble.com/ArrayIndexOutOfBoundsException-with-SourcePersister-since-5-1-td5034233.html
即使他们面临 ArrayIndexOutOfBoundsException,我也尝试了他们的解决方案,它对我也有效。
更新:我还将 Sonarqube Groovy 插件从 1.2 恢复到 1.0.1,它也有助于上述解决方案。上述解决方案不适用于 Sonarqube Groovy 插件 1.2.
更新 2:我创建了一个小的 groovy 代码,它将 运行 在 coverage.xml 创建结束时和 运行宁声纳-运行纳尔。此 groovy 代码遍历所有 coverage.xml 创建并删除包含行号 =“0”的节点。这样,文件也是覆盖范围的一部分,没有任何内容被排除在外。
我有以下设置:
- Sonarqube v5.1.2
- Sonar Runner v2.4
- Sonarqube v1.6.3 的 Cobertura 插件
- Groovy Sonarqube v1.2 插件
所有版本都是最新的。
我的项目结构如下:
ParentProject
|-sonar-project.properties
|- Grails Project A
| |-sonar-project.properties
ParentProject 文件夹 sonar-project.properties 包含以下内容:
sonar.projectKey=ParentProject
sonar.projectName=Parent Project SONARQUBE
sonar.projectVersion=1.0
sonar.scm.url=scm:svn:https://server/svn/nv/frontend/grails/trunk
sonar.scm.provider=svn
sonar.language=grvy
sonar.core.codeCoveragePlugin=cobertura
sonar.grvy.coveragePlugin=cobertura
sonar.groovy.cobertura.reportPath=target/test-reports/cobertura/coverage.xml
sonar.cobertura.reportPath=target/test-reports/cobertura/coverage.xml
sonar.sourceEncoding=UTF-8
sonar.web.file.suffixes=gsp
sonar.modules= ProjectA
# Settings for servicemodel#
ProjectA.sonar.projectBaseDir=./ProjectA
在 ProjectA 中,我们有以下声纳-project.properties:
sonar.modules = projectA-groovymodule, projectA-javascriptmodule, projectA-webmodule
projectA-groovymodule.sonar.projectBaseDir=.
projectA-groovymodule.sonar.language=grvy
projectA-groovymodule.sonar.sources=grails-app/services,grails-app/controllers,grails-app/domain,grails-app/taglib,src/groovy
projectA-groovymodule.sonar.tests=test/unit,test/integration
projectA-groovymodule.sonar.junit.reportsPath=target/test-reports
projectA-groovymodule.sonar.cobertura.reportPath = target/test-reports/cobertura/coverage.xml
projectA-groovymodule.sonar.groovy.cobertura.reportPath=target/test-reports/cobertura/coverage.xml
projectA-groovymodule.sonar.grvy.coveragePlugin=cobertura
projectA-javascriptmodule.sonar.projectBaseDir=.
projectA-javascriptmodule.sonar.language=js
projectA-javascriptmodule.sonar.sources=grails-app, web-app/js
projectA-javascriptmodule.sonar.exclusions=web-app/js/lib/**/*
projectA-webmodule.sonar.projectBaseDir=.
projectA-webmodule.sonar.language=web
projectA-webmodule.sonar.sources=grails-app/views
我可以确认 coverage.xml 已经生成并且在此处指定的文件夹中可用。
sonar-runner输出结果如下:
D:\Build\ParentProject>sonar-runner
D:\Apps\sonar-runner-2.4
SonarQube Runner 2.4
Java 1.7.0_51 Oracle Corporation (64-bit)
Windows Server 2008 R2 6.1 amd64
INFO: Runner configuration file: D:\Apps\sonar-runner-2.4\conf\sonar-runner.properties
INFO: Project configuration file: D:\Build\ParentProject\sonar-project.properties
INFO: Default locale: "en_EN", source code encoding: "UTF-8"
INFO: Work directory: D:\Build\ParentProject\.\.sonar
INFO: SonarQube Server 5.1.2
16:05:40.180 INFO - Load global repositories
16:05:40.644 INFO - Load global repositories (done) | time=470ms
16:05:40.689 INFO - Server id: 20150930161227
16:05:40.696 INFO - User cache: d:\gebruikers\user\.sonar\cache
16:05:40.888 INFO - Install plugins
16:05:43.829 INFO - Install JDBC driver
16:05:44.278 INFO - Create JDBC datasource for jdbc:jtds:sqlserver://dbserver:port/db;instance=instance;SelectMethod=Cursor
16:05:48.516 INFO - Initializing Hibernate
16:05:56.529 INFO - Load project repositories
16:05:57.659 INFO - Load project repositories (done) | time=1130ms
16:05:57.822 INFO - Load project settings
16:05:59.033 INFO - Load technical debt model
16:05:59.085 INFO - Apply project exclusions
16:06:01.353 INFO - ------------- Scan projectA-groovymodule
16:06:01.360 INFO - Load module settings
16:06:01.731 INFO - Language is forced to grvy
16:06:01.734 INFO - Load rules
16:06:03.153 INFO - Base dir: D:\Build\ParentProject\ProjectA
16:06:03.156 INFO - Working dir: D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule
16:06:03.158 INFO - Source paths: grails-app/services, grails-app/controllers, grails-app/domain, grails-app/taglib, src/groovy
16:06:03.159 INFO - Test paths: test/unit, test/integration
16:06:03.160 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:03.161 INFO - Index files
16:06:03.179 INFO - Excluded sources:
16:06:03.181 INFO - web-app/js/jquery/**
16:06:03.314 INFO - 18 files indexed
16:06:03.315 INFO - 0 files ignored because of inclusion/exclusion patterns
16:06:03.648 INFO - Quality profile for grvy: profile
16:06:04.398 INFO - Sensor Lines Sensor
16:06:04.512 INFO - Sensor Lines Sensor (done) | time=114ms
16:06:04.513 INFO - Sensor QProfileSensor
16:06:04.522 INFO - Sensor QProfileSensor (done) | time=9ms
16:06:04.525 INFO - Sensor InitialOpenIssuesSensor
16:06:04.682 INFO - Sensor InitialOpenIssuesSensor (done) | time=157ms
16:06:04.683 INFO - Sensor ProjectLinksSensor
16:06:04.696 INFO - Sensor ProjectLinksSensor (done) | time=13ms
16:06:04.697 INFO - Sensor VersionEventsSensor
16:06:04.716 INFO - Sensor VersionEventsSensor (done) | time=19ms
16:06:04.717 INFO - Sensor CodeNarc
16:06:04.718 INFO - Executing CodeNarc
16:06:05.580 INFO - Loaded properties file in 67ms; 346 rules
16:06:05.641 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:07.175 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:09.625 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:11.759 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report1.xml] created.
CodeNarc completed: (p1=0; p2=2; p3=2) 4140ms
16:06:11.764 INFO - Loaded properties file in 1ms; 346 rules
16:06:11.765 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:11.869 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:15.067 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:17.707 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report2.xml] created.
CodeNarc completed: (p1=0; p2=17; p3=13) 3298ms
16:06:17.710 INFO - Loaded properties file in 1ms; 346 rules
16:06:17.711 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:17.826 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:17.837 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:18.969 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report3.xml] created.
CodeNarc completed: (p1=0; p2=0; p3=0) 127ms
16:06:18.972 INFO - Loaded properties file in 1ms; 346 rules
16:06:18.973 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:19.040 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:19.167 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:19.532 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report4.xml] created.
CodeNarc completed: (p1=0; p2=0; p3=2) 195ms
16:06:19.537 INFO - Loaded properties file in 1ms; 346 rules
16:06:19.540 INFO - Loading ruleset from [file:D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groo
vymodule\codenarc\profile.xml]
16:06:19.586 INFO - RuleSet configuration properties file [codenarc.properties] not found.
16:06:19.774 INFO - No custom message bundle found for [codenarc-messages]. Using default messages.
16:06:20.092 INFO - Report file [D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-groovymodule\coden
arc\report5.xml] created.
CodeNarc completed: (p1=0; p2=4; p3=38) 233ms
16:06:20.765 INFO - Sensor CodeNarc (done) | time=16048ms
16:06:20.766 INFO - Sensor GroovySensor
16:06:21.158 INFO - GMetrics completed: 237ms
16:06:21.203 INFO - Sensor GroovySensor (done) | time=437ms
16:06:21.204 INFO - Sensor Groovy CoberturaSensor
16:06:21.205 INFO - Analyzing Cobertura report: target/test-reports/cobertura/coverage.xml
16:06:21.377 INFO - Sensor Groovy CoberturaSensor (done) | time=173ms
16:06:21.378 INFO - Sensor SCM Sensor
16:06:21.414 INFO - Sensor SCM Sensor (done) | time=36ms
16:06:21.415 INFO - Sensor GroovySurefireSensor
16:06:21.417 INFO - parsing D:\Build\ParentProject\ProjectA\target\test-reports
16:06:21.418 INFO - Sensor GroovySurefireSensor (done) | time=3ms
16:06:21.419 INFO - Sensor CPD Sensor
16:06:21.420 INFO - DefaultCpdEngine is used for grvy
16:06:21.421 INFO - Cross-project analysis enabled
16:06:21.760 INFO - Sensor CPD Sensor (done) | time=341ms
16:06:21.769 INFO - No quality gate is configured.
16:06:21.853 INFO - Compare to previous analysis (2015-10-01)
16:06:21.861 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:21.864 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:22.556 INFO - Execute decorators...
16:06:24.684 INFO - ------------- Scan ProjectA-javascriptmodule
16:06:24.686 INFO - Load module settings
16:06:24.727 INFO - Language is forced to js
16:06:24.744 INFO - Base dir: D:\Build\ParentProject\ProjectA
16:06:24.745 INFO - Working dir: D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-javascriptmodule
16:06:24.746 INFO - Source paths: grails-app, web-app/js
16:06:24.747 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:24.748 INFO - Index files
16:06:24.749 INFO - Excluded sources:
16:06:24.750 INFO - web-app/js/lib/**/*
16:06:24.815 INFO - 9 files indexed
16:06:24.816 INFO - 3 files ignored because of inclusion/exclusion patterns
16:06:24.903 INFO - Quality profile for js: ParentProject
16:06:24.948 INFO - Sensor Lines Sensor
16:06:24.952 INFO - Sensor Lines Sensor (done) | time=4ms
16:06:24.953 INFO - Sensor QProfileSensor
16:06:24.954 INFO - Sensor QProfileSensor (done) | time=1ms
16:06:24.954 INFO - Sensor InitialOpenIssuesSensor
16:06:25.024 INFO - Sensor InitialOpenIssuesSensor (done) | time=70ms
16:06:25.031 INFO - Sensor ProjectLinksSensor
16:06:25.040 INFO - Sensor ProjectLinksSensor (done) | time=9ms
16:06:25.043 INFO - Sensor VersionEventsSensor
16:06:25.096 INFO - Sensor VersionEventsSensor (done) | time=53ms
16:06:25.097 INFO - Sensor JavaScriptSquidSensor
16:06:25.101 INFO - 9 source files to be analyzed
16:06:26.722 INFO - Sensor JavaScriptSquidSensor (done) | time=1625ms
16:06:26.723 INFO - 9/9 source files have been analyzed
16:06:26.724 INFO - Sensor SCM Sensor
16:06:26.732 INFO - Sensor SCM Sensor (done) | time=8ms
16:06:26.733 INFO - Sensor org.sonar.plugins.javascript.lcov.UTCoverageSensor@4d2f36b2
16:06:26.733 INFO - Sensor org.sonar.plugins.javascript.lcov.UTCoverageSensor@4d2f36b2 (done) | time=0ms
16:06:26.734 INFO - Sensor org.sonar.plugins.javascript.lcov.ITCoverageSensor@56b007b4
16:06:26.735 INFO - Sensor org.sonar.plugins.javascript.lcov.ITCoverageSensor@56b007b4 (done) | time=1ms
16:06:26.735 INFO - Sensor CPD Sensor
16:06:26.736 INFO - DefaultCpdEngine is used for js
16:06:26.736 INFO - Cross-project analysis enabled
16:06:27.151 INFO - Sensor CPD Sensor (done) | time=416ms
16:06:27.153 INFO - No quality gate is configured.
16:06:27.159 INFO - Compare to previous analysis (2015-10-01)
16:06:27.161 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:27.163 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:27.518 INFO - Execute decorators...
16:06:27.916 INFO - ------------- Scan ProjectA-webmodule
16:06:27.918 INFO - Load module settings
16:06:27.949 INFO - Language is forced to web
16:06:27.968 INFO - Base dir: D:\Build\ParentProject\ProjectA
16:06:27.969 INFO - Working dir: D:\Build\ParentProject\.sonar\ParentProject_ProjectA_ProjectA-webmodule
16:06:27.970 INFO - Source paths: grails-app/views
16:06:27.970 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:27.971 INFO - Index files
16:06:27.972 INFO - Excluded sources:
16:06:27.973 INFO - web-app/js/jquery/**
16:06:28.027 INFO - 28 files indexed
16:06:28.028 INFO - 0 files ignored because of inclusion/exclusion patterns
16:06:28.273 INFO - Quality profile for web: ParentProject
16:06:28.306 INFO - Sensor Lines Sensor
16:06:28.312 INFO - Sensor Lines Sensor (done) | time=6ms
16:06:28.312 INFO - Sensor QProfileSensor
16:06:28.313 INFO - Sensor QProfileSensor (done) | time=1ms
16:06:28.314 INFO - Sensor InitialOpenIssuesSensor
16:06:28.409 INFO - Sensor InitialOpenIssuesSensor (done) | time=95ms
16:06:28.410 INFO - Sensor ProjectLinksSensor
16:06:28.413 INFO - Sensor ProjectLinksSensor (done) | time=3ms
16:06:28.414 INFO - Sensor VersionEventsSensor
16:06:28.424 INFO - Sensor VersionEventsSensor (done) | time=10ms
16:06:28.424 INFO - Sensor WebSensor
16:06:28.722 INFO - Sensor WebSensor (done) | time=298ms
16:06:28.723 INFO - Sensor SCM Sensor
16:06:28.738 INFO - Sensor SCM Sensor (done) | time=15ms
16:06:28.739 INFO - Sensor CPD Sensor
16:06:28.740 INFO - DefaultCpdEngine is used for web
16:06:28.740 INFO - Cross-project analysis enabled
16:06:29.201 INFO - Sensor CPD Sensor (done) | time=462ms
16:06:29.203 INFO - No quality gate is configured.
16:06:29.207 INFO - Compare to previous analysis (2015-10-01)
16:06:29.209 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:29.211 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:29.522 INFO - Execute decorators...
16:06:31.389 INFO - ------------- Scan ProjectA
16:06:31.391 INFO - Load module settings
16:06:31.440 INFO - Base dir: D:\Build\ParentProject\ProjectA
16:06:31.441 INFO - Working dir: D:\Build\ParentProject\.sonar\ParentProject_ProjectA
16:06:31.442 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:31.474 INFO - Sensor Lines Sensor
16:06:31.474 INFO - Sensor Lines Sensor (done) | time=0ms
16:06:31.475 INFO - Sensor InitialOpenIssuesSensor
16:06:31.513 INFO - Sensor InitialOpenIssuesSensor (done) | time=38ms
16:06:31.514 INFO - Sensor ProjectLinksSensor
16:06:31.517 INFO - Sensor ProjectLinksSensor (done) | time=3ms
16:06:31.518 INFO - Sensor VersionEventsSensor
16:06:31.528 INFO - Sensor VersionEventsSensor (done) | time=10ms
16:06:31.529 INFO - Sensor SCM Sensor
16:06:31.530 INFO - Sensor SCM Sensor (done) | time=1ms
16:06:31.530 INFO - Sensor CPD Sensor
16:06:31.531 INFO - Sensor CPD Sensor (done) | time=1ms
16:06:31.532 INFO - No quality gate is configured.
16:06:31.537 INFO - Compare to previous analysis (2015-10-01)
16:06:31.538 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:31.540 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:31.808 INFO - Execute decorators...
16:06:31.932 INFO - ------------- Scan ParentProject SonarQube Runner
16:06:31.934 INFO - Load module settings
16:06:31.985 INFO - Base dir: D:\Build\ParentProject
16:06:31.986 INFO - Working dir: D:\Build\ParentProject\.sonar
16:06:31.986 INFO - Source encoding: UTF-8, default locale: en_EN
16:06:32.020 INFO - Sensor Lines Sensor
16:06:32.021 INFO - Sensor Lines Sensor (done) | time=1ms
16:06:32.021 INFO - Sensor InitialOpenIssuesSensor
16:06:32.062 INFO - Sensor InitialOpenIssuesSensor (done) | time=41ms
16:06:32.063 INFO - Sensor ProjectLinksSensor
16:06:32.067 INFO - Sensor ProjectLinksSensor (done) | time=4ms
16:06:32.067 INFO - Sensor VersionEventsSensor
16:06:32.077 INFO - Sensor VersionEventsSensor (done) | time=10ms
16:06:32.078 INFO - Sensor SCM Sensor
16:06:32.078 INFO - Sensor SCM Sensor (done) | time=0ms
16:06:32.079 INFO - Sensor CPD Sensor
16:06:32.079 INFO - Sensor CPD Sensor (done) | time=0ms
16:06:32.081 INFO - No quality gate is configured.
16:06:32.086 INFO - Compare to previous analysis (2015-10-01)
16:06:32.088 INFO - Compare over 30 days (2015-09-01, analysis of Mon Aug 31 01:18:52 CEST 2015)
16:06:32.090 INFO - Compare over 21 days (2015-09-10, analysis of Wed Sep 09 01:18:12 CEST 2015)
16:06:32.280 INFO - Execute decorators...
16:06:32.437 INFO - Store results in database
16:06:34.455 INFO - Analysis reports generated in 269ms, dir size=85 KB
16:06:34.762 INFO - Analysis reports compressed in 305ms, zip size=57 KB
16:06:35.137 INFO - Analysis reports sent to server in 374ms
16:06:35.138 INFO - ANALYSIS SUCCESSFUL, you can browse http://server/dashboard/index/ParentProject
16:06:35.139 INFO - Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report.
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
Total time: 56.500s
Final Memory: 73M/1274M
INFO: ------------------------------------------------------------------------
没有抛出任何错误,根据日志,找到并读取了 cobertura 报告文件。但是,在 SonarQube 屏幕中,覆盖部分是空的。
任何人都可以提供任何帮助吗?
****更新****: Coverage.xml 内容(截断):
<coverage line-rate="0.1625615763546798" branch-rate="0.034403669724770644" lines-covered="33" lines-valid="203" branches-covered="15" branches-valid="436" complexity="0.0" version="2.0.3" timestamp="1444086827204">
<sources>
<source>
D:/Build/ParentProject/grails-app/services
</source>
<source>
D:/Build/ParentProject/src/groovy
</source>
<source>
D:/Build/ParentProject/grails-app/taglib
</source>
<source>
D:/Build/ParentProject/grails-app/controllers
</source>
</sources>
<packages>
<package name="" line-rate="0.5" branch-rate="0.0" complexity="0.0">
<classes>
<class name="GrailsMelodyConfig" filename="GrailsMelodyConfig.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods>
<method name="run" signature="()Ljava/lang/Object;" line-rate="1.0" branch-rate="1.0">
<lines>
<line number="24" hits="1" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="24" hits="1" branch="false"/>
</lines>
</class>
<class name="HelpContextFilters" filename="HelpContextFilters.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods/>
<lines/>
</class>
<class name="Filters" filename="Filters.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods/>
<lines/>
</class>
<class name="Filters$_closure1" filename="Filters.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="1.0" branch-rate="1.0">
<lines>
<line number="5" hits="1" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="5" hits="1" branch="false"/>
</lines>
</class>
<class name="Filters$_closure1$_closure2" filename="Filters.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="1.0" branch-rate="1.0">
<lines>
<line number="6" hits="1" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="6" hits="1" branch="false"/>
</lines>
</class>
<class name="Filters$_closure1$_closure2$_closure3" filename="Filters.groovy" line-rate="0.0" branch-rate="0.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="0.0" branch-rate="0.0">
<lines>
<line number="7" hits="0" branch="true" condition-coverage="0% (0/2)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="8" hits="0" branch="true" condition-coverage="0% (0/4)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
<condition number="1" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="9" hits="0" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="7" hits="0" branch="true" condition-coverage="0% (0/2)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="8" hits="0" branch="true" condition-coverage="0% (0/4)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
<condition number="1" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="9" hits="0" branch="false"/>
</lines>
</class>
</classes>
</package>
<package name="com" line-rate="0.0" branch-rate="0.0" complexity="0.0">
<classes>
<class name="com.CustomHtmlTagLib" filename="com/CustomHtmlTagLib.groovy" line-rate="1.0" branch-rate="1.0" complexity="0.0">
<methods/>
<lines/>
</class>
<class name="com.CustomHtmlTagLib$_closure1" filename="com/CustomHtmlTagLib.groovy" line-rate="0.0" branch-rate="0.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="0.0" branch-rate="0.0">
<lines>
<line number="16" hits="0" branch="false"/>
<line number="18" hits="0" branch="true" condition-coverage="0% (0/4)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
<condition number="1" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="19" hits="0" branch="false"/>
<line number="21" hits="0" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="16" hits="0" branch="false"/>
<line number="18" hits="0" branch="true" condition-coverage="0% (0/4)">
<conditions>
<condition number="0" type="jump" coverage="0%"/>
<condition number="1" type="jump" coverage="0%"/>
</conditions>
</line>
<line number="19" hits="0" branch="false"/>
<line number="21" hits="0" branch="false"/>
</lines>
</class>
<class name="com.CustomHtmlTagLib$_closure2" filename="com/CustomHtmlTagLib.groovy" line-rate="0.0" branch-rate="1.0" complexity="0.0">
<methods>
<method name="doCall" signature="(Ljava/lang/Object;)Ljava/lang/Object;" line-rate="0.0" branch-rate="1.0">
<lines>
<line number="26" hits="0" branch="false"/>
</lines>
</method>
</methods>
<lines>
<line number="26" hits="0" branch="false"/>
</lines>
</class>
</classes>
</package>
... TRUNCATED ...
</packages>
</coverage>
上述问题终于有了答案。在这里张贴,以便对其他人有所帮助。
在 coverage.xml 中,对于某些源文件,行号被评估为“0”,如下所示:
<line number="0" hits="0" branch="true" condition-coverage="33% (1/3)">
<conditions>
<condition number="0" type="switch" coverage="33%"/>
</conditions>
</line>
有两种解决方案可以解决同样的问题:
- 降级用于生成 coverage.xml 并检查 coverage.xml 是否仍然生成上述内容 行
或
从BuildConfig.groovy中的覆盖范围中排除文件 (因为我使用的是 Grails 应用程序):
覆盖率{ 排除 = [ "FileA*", "FileB*", "**/package/*"] }
更多信息:
- http://dublintech.blogspot.nl/2015/06/problems-with-cobertura-and-sonar-51.html
- http://sonarqube-archive.15.x6.nabble.com/ArrayIndexOutOfBoundsException-with-SourcePersister-since-5-1-td5034233.html
即使他们面临 ArrayIndexOutOfBoundsException,我也尝试了他们的解决方案,它对我也有效。
更新:我还将 Sonarqube Groovy 插件从 1.2 恢复到 1.0.1,它也有助于上述解决方案。上述解决方案不适用于 Sonarqube Groovy 插件 1.2.
更新 2:我创建了一个小的 groovy 代码,它将 运行 在 coverage.xml 创建结束时和 运行宁声纳-运行纳尔。此 groovy 代码遍历所有 coverage.xml 创建并删除包含行号 =“0”的节点。这样,文件也是覆盖范围的一部分,没有任何内容被排除在外。