这是在使用 JENKINS 构建的 Maven 3 Java JS 项目中使用 Sonar 时发现的问题/问题。
为了分析我的项目,我选择了两种不同的方式,但是两种方式均不起作用。
第一种方法 :在JENKINS中将Sonar作为独立任务启动,作为构建后的动作
*从 *JENKINS 安装的 Sonar插件* v2.1 *
*从 *JENKINS 安装的 Sonar Runner* v2.3 *
在我的Maven项目的后期构建部分中,我将Launch Sonar 选中为独立任务,并设置以下属性:
# Required metadata sonar.projectKey=*** sonar.projectName=*** sonar.projectVersion=1.0 sonar.java.source=1.7 # Path to the parent source code directory. sonar.sources=src/main #Path to the directories to exclude sonar.exclusions=src/main/webapp/ui/ext/**,src/main/webapp/ui/build/**,src/main/webapp/ui/admin/sass/**,src/main/webapp/ui/user/sass/**,src/main/ressources/** #Path to classes directory sonar.binaries=target/classes #Path to Junit test reports and test files sonar.junit.reportsPath=target/surefire-reports sonar.tests=src/test sonar.dynamicAnalysis=reuseReports #Jacoco coverage report sonar.jacoco.reportPath=target/jacoco.exec sonar.java.coveragePlugin=jacoco # Encoding of the source code sonar.sourceEncoding=UTF-8
通过这种方式,我可以根据需要分析 JAVA 和 JS。 但是, SONAR 不会加载 Maven 依赖项, 因为它们应该被加载。这是 SONAR 分析时的日志:
09:23:55.605 INFO - Java bytecode scan... 09:23:55.646 WARN - Class 'org/springframework/context/ApplicationContext' is not accessible through the ClassLoader. 09:23:55.656 WARN - Class 'com/mongodb/MongoClient' is not accessible through the ClassLoader. 09:23:55.657 WARN - Class 'com/mongodb/DB' is not accessible through the ClassLoader. 09:23:55.661 WARN - Class 'org/springframework/context/ApplicationContext' is not accessible through the ClassLoader. 09:23:55.662 WARN - Class 'org/springframework/context/ApplicationContext' is not accessible through the ClassLoader. ... 09:23:55.749 WARN - Class 'org/apache/log4j/Logger' is not accessible through the ClassLoader. 09:23:55.773 INFO - Java bytecode scan done: 168 m
我可以在 Sonar 中看到代码覆盖率…并且分析是 成功的, 但是我无法在构建中保留这些警告。
所以我做了一个 Sonar 使用 maven的 分析。
第二种方式:使用Maven进行Soanar
*从 *JENKINS 安装的 Maven* 插件v3.0.4 *
*从 *JENKINS 安装的 Sonar* 插件v2.1 *
在构建后部分中,我选择Sonar并设置以下属性:
-Dsonar.projectKey=*** -Dsonar.projectName=*** -Dsonar.projectVersion=1.0 -Dsonar.java.source=1.7 -Dsonar.sources=src/main -Dsonar.exclusions=src/main/webapp/ui/ext/**,src/main/webapp/ui/build/**,src/main/webapp/ui/admin/sass/**,src/main/webapp/ui/user/sass/**,src/main/ressources/** -Dsonar.binaries=target/classes -Dsonar.junit.reportsPath=target/surefire-reports -Dsonar.tests=src/test -Dsonar.dynamicAnalysis=reuseReports -Dsonar.jacoco.reportPath=target/jacoco.exec -Dsonar.java.coveragePlugin=jacoco -Dsonar.sourceEncoding=UTF-8
使用这种方式,我不再有类加载器问题,并且所有依赖项都已加载。
但是 Sonar 仅分析 JAVA 代码,即使我定义了sonar.sources=src/main他也仅分析 JAVA 。
sonar.sources=src/main
这是日志:
[INFO] --- sonar-maven-plugin:2.2:sonar (default-cli) @ WebDark --- [INFO] SonarQube version: 4.2 INFO: Default locale: "fr_FR", source code encoding: "UTF-8" .... [INFO] [15:20:59.054] Base dir: /**/**/jenkins/jobs/**/workspace [INFO] [15:20:59.054] Working dir: /**/**/jenkins/jobs/**/workspace/target/sonar [INFO] [15:20:59.054] Source dirs: /**/**/jenkins/jobs/**/workspace/src/main/java [INFO] [15:20:59.054] Test dirs: /**/**/jenkins/jobs/**/workspace/src/test/java [INFO] [15:20:59.054] Binary dirs: /**/**/jenkins/jobs/WebDark/workspace/target/classes [INFO] [15:20:59.055] Source encoding: UTF-8, default locale: fr_FR [INFO] [15:20:59.055] Index files [INFO] [15:20:59.083] Excluded sources: ... ...
再次,分析是 成功的, 但是 SONAR 不分析 JS 。正如您在日志中看到的那样,即使我之前Source dirs设置了,它也被设置为。/**/**/jenkins/jobs/**/workspace/src/main/java``-Dsonar.sources=src/main
Source dirs
/**/**/jenkins/jobs/**/workspace/src/main/java``-Dsonar.sources=src/main
那么,有没有可能来分析 JAVA 和 JS 在 Maven的 许多项目 的依赖 使用 SONAR 和 JENKINS 没有 警告/错误 并以 适当的 方式?确实 SONAR 有限制?
感谢您考虑我的帖子并帮助我解决问题。
我希望可以通过向您指出本文档的第一段为您提供帮助:
它说:“ …因此,对于多语言项目,通常必须将该属性重写为:sonar.sources = src。 请注意,此属性只能在pom文件中设置。无法通过命令行 。”
http://docs.codehaus.org/display/SONAR/Analyzing+with+Maven#AnalyzingwithMaven- Analyzinga多语言项目
祝好运!