2016-11-18 55 views
1

我有一个简单的项目,需要运行JUnit测试,并让SonarQube使用SonarScanner扫描/运行JUnit测试结果。我把我的项目在Github hereSonarQube Jacoco JUnit:SonarScanner得到许多意想不到的问题

存在一些问题:

  1. 警告:类 “XXX” 是无法通过类加载器声纳访问(Reference
  2. 没有jacoco-it.exec和jacoco-UT .exec,只在SonarScanner运行jacoco.exec
  3. 运行测试的JUnit时,无法排除某些文件,因为我只希望在我的服务文件夹(Reference
运行测试个

这是我sonar-project.properties:

# Required metadata 
sonar.projectKey=com.example:Sample 
sonar.projectName=Java :: Example :: SonarQube Scanner 
sonar.projectVersion=1.0 

# Comma-separated paths to directories with sources (required) 
sonar.sources=src 
sonar.exclusions=src/main/resources/** 
#sonar.test.inclusions=src/main/java/com/example/service/**, src/test/java/** 
#sonar.test.exclusions=src/main/java/com/example/controller/** 

# Encoding of the source files 
sonar.sourceEncoding=UTF-8 

#Jacoco 
sonar.junit.reportsPath=target/surefire-reports 
sonar.jacoco.reportPath =target/jacoco.exec 
sonar.jacoco.reportMissing.force.zero=true 
sonar.java.binaries=target/classes/** 
#sonar.java.libraries=libs/** 

当我运行Maven的测试,直到成功建立,它建立在文件夹目标一些文件和文件夹。

enter image description here

之后,我跑我的SonarScanner扫描我的项目,但我得到了这些问题。

我的问题:

  1. 我如何运行我的SonarQube扫描仪没有任何WARN?
  2. 如何在扫描JUnit结果时正确排除文件?因为我使用参考设置,并且Coverage仍然扫描文件
  3. 如何创建jacoco-it.exec和jacoco-ut.exec并在SonarScanner上运行它?

我的项目是在此基础上Reference

+0

如果您使用的是Maven,则不需要'sonar-project.properties':请参考有关使用Maven扫描程序进行分析的文档 - http://docs.sonarqube.org/display/SCAN/Analyzing+with+ SonarQube + Scanner + for + Maven使用它应该足以避免许多配置问题,例如如警告'类“XXX”不可访问'。 'jacoco-ut.exec'和'jacoco-it.exec'分别是执行'jacoco-maven-plugin'的产品,用于单元测试和集成测试。 – Godin

+0

我使用sonarqube和sonarscanner作为第三方。这就是为什么我有sonar-project.properties。我下载了SonarQube和SonarScanner的RAR,然后首先启动我的SonarQube,然后进入CMD,进入我的文件夹(sampleProject),然后运行扫描仪。 SonarScanner的设置基于sonar-project.properties上的问题 –

+0

问:“我怎样才能在没有任何警告的情况下运行SonarQube扫描仪?”答:为Maven使用SonarQube扫描仪。 – Godin

回答

2

使用SonarQube Scanner for Maven,而不是仅仅SonarQube Scanner。否则,你陷入与配置的麻烦,在其中你掉下去,因为需要做手工一切:

  • sonar.sources最有可能是不正确 - 应该是src/main/java,将由扫描仪Maven的正确配置,这就是为什么你”重新获得,通常对Maven基于项目点src/test/java分析为主要文件
  • 以及sonar.tests不需要的测试文件
  • sonar.java.libraries是空的,这就是为什么你要Class "XXX" is not accessible through the classloader sonar - 这可能是十分困难,列出所有需要的JAR Maven proj的依赖文件ECT,而再次扫描仪作为Maven会自动做到这一点,最重要的将做到这一点正确
  • sonar.projectKey用扫描仪对Maven将自动设置到Maven的groupId:artifactId的
  • sonar.projectNamesonar.version用扫描仪对Maven将正确地设置为分别Maven项目名称和版本,这样你就不需要更改版本的时候,就会在Maven项目改变
  • 其他如sonar.sourceEncodingsonar.java.binariessonar.java.test.binariessonar.java.test.libraries用扫描仪对Maven也将被自动设定

如果需要的话,你仍然可以提供其他的附加属性

  • 通过命令行如mvn ... sonar:sonar -Dsonar.something=something
  • 或SonarQube UI
  • 或直接在pom.xml
properties部分指定它们

如何创建jacoco-it.exec和jacoco-ut.exec并在SonarScanner上运行它?

通常jacoco-ut.exec是指覆盖数据有关的单元测试和jacoco-it.exec指的是关于集成测试的覆盖数据。它们是由jacoco-maven-plugin创建的,在您的pom.xml中,您配置了jacoco-maven-plugin用于创建jacoco.exec

+0

嘿,谢谢你的回答和那些解释。我不好使用SonarScanner。 如何才能在我的特定文件夹上运行覆盖率单元测试? 例如在我的Github项目中,我只希望Jacoco覆盖服务文件。所以我需要排除除Service以外的其他文件。但是当我运行mvn声纳:声纳时,它仍然扫描我项目中的所有文件。 –

相关问题