使用 Maven 3 Java JS 项目中使用声纳时发现的问题/问题strong> JENKINS build。
为了分析我的项目,我选择了两种不同的方式,但两种方式都不能正常工作。
第一种方式:在JENKINS中将Sonar作为一个后期构建操作启动为独立任务
声纳插件 v2.1从 JENKINS
安装Sonar Runner v2.3从 JENKINS安装
在我的maven项目的后期构建部分,我选中启动声纳作为独立任务,然后设置这些属性:
# 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
我可以在声纳中看到代码覆盖率......分析是成功但是我无法在构建中保留这些警告。
所以我使用 maven 进行声纳分析。
第二种方式:使用maven的Soanar
Maven 插件v3.0.4从 JENKINS
安装声纳插件v2.1从 JENKINS
安装在构建部分之后,我选择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
使用这种方式,我没有更多的classe加载器问题,并且所有依赖项都被加载。
但声纳仅分析 JAVA 代码,即使我定义sonar.sources=src/main
他只分析 JAVA 。
这是日志:
[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:
...
...
同样,分析 SUCCESSFUL 但是, SONAR 并不分析 JS 。正如您在日志中看到的那样,Source dirs
即使我在/**/**/jenkins/jobs/**/workspace/src/main/java
之前设置,也会设置为-Dsonar.sources=src/main
。
那么,是否有可能在 Maven 项目中分析 JAVA 和 JS ,其中包含许多依赖项 SONAR 和 JENKINS ,没有警告/错误并且正确方式? SONAR 有限制吗?
感谢您对我的帖子进行汇总并帮助我解决问题。
答案 0 :(得分:2)
我希望我能通过向您指出本文档的第一段来帮助您:
它sais" ...因此,对于多语言项目,通常必须将属性覆盖为:sonar.sources = src。 请注意,此属性只能在pom文件中设置。无法通过命令行设置。"
祝你好运!
答案 1 :(得分:2)
如果你想要依赖性分析,那么确实是使用Maven插件进行分析的唯一方法。
如果您希望能够使用命令行中的属性sonar.sources覆盖默认的Maven源目录,那么您应该观察/投票此票证: https://jira.codehaus.org/browse/MSONAR-70
请注意,从SonarQube Maven插件2.3开始,我们使用内部声纳运行器API,因此命令行中的覆盖属性可能在您的情况下工作(因为您似乎只有一个模块项目)。但是在MSONAR-70被正确修复之前没有保证。