SonarQube(Sonar)服务器在windows下的安装和部署

              这两天在服务器上面安装Sonar,因为版本匹配问题,多花了一点点时间。今天终于把项目的分析结果上传到Sonar本地服务器上,特此对过程中出现过的问题做一个记录。

     首先说明SonarQube(Sonar)是什么东西,有什么用:

Sonar 是一个开源平台,开源地址为:http://www.oschina.net/p/sonar/?fromerr=Unur081u ,用于管理源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。 与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。 

         在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。 

         此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

            Sonar的下载和安装:

           Sonar的官网Sonar;目前最新的版本是6.3

           在这儿要特别说明的是不同的版本匹配不同的jdk,比如6.3就必须要求jdk1.8以上,不然就会报各种启动异常的问题。

          Sonar的下载地址为:https://www.sonarqube.org/downloads/ ;由于和maven配合使用的原因,我本次下载的是Sonar 5.1.2版本,该版本要求jdk为1.7以上,实际服务器jdk版本为JDK1.8.

   


    下载后解压缩 sonarqube-5.1.2 .zip文件得到sonarqube-5.1.2文件夹,在保证安装好jdk1.7版本的情况下,进入sonarqube-5.1.2\bin\windows-x86-64目录,执行 StartSonar.bat  没有报错的情况下,启动成功后访问:http://localhost:9000  ,如果能正常打开页面说明安装Sonar成功了。(当执行成功后,手动关闭StartSonar.bat 的执行窗口,实际上在系统中不会退出,还在运行,这点有点不合理,也让我在汉化和配置数据库源的时候再次执行 StartSonar.bat不成功,最后还是重启电脑才可以启动

   为Sonar配置mysql数据源和汉化设置

      配置mysql数据源

            推荐使用MySQL(默认会使用sonar内置的数据库)  

         CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 

         CREATE USER 'sonar' IDENTIFIED BY 'sonar';

         GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar'; 

         GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';

         执行完以后,可以在mysql数据库中看到对应的数据库,但是此时还没有表,相应的表要在修改了Sonar的配置文件后,第一次启动Sonar的时候初始化进行新建的Sonar数据库。在这次我们的mysql数据库版本为 5.6.19在此之前我试过用原来的root账号建立sonar2016的数据库,没有给root再另外赋权限,Sonar启动报错,最好还是按照上面提示的语句来弄,另外Sonar不同版本对mysql的版本也有要求,不匹配的版本也是会启动错误的!

       Sonar数据库文件配置: sonarqube-5.1.2\conf下面的sonar.properties

修改的配置项为:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

#----- Embedded Database (default)
# It does not accept connections from remote hosts, so the
# server and the analyzers must be executed on the same host.
#sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar

# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092


#----- MySQL 5.x
# Only InnoDB storage engine is supported (not myISAM).
# Only the bundled driver is supported.
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance


  同时最好修改Sonar启动的JVM设置,不然启动的过程中也容易出错,该设置也是在sonar.properties

sonar.search.javaOpts=-Xmx1G -Xms256m -Xss256k -Djava.net.preferIPv4Stack=true 


     Sonar汉化

       Sonar的汉化的话需要对应的jar包,这儿也要注意的是不同的Sonar版本对应的汉化包的版本也不一样:

       汉化包下载地址: https://github.com/SonarQubeCommunity/sonar-l10n-zh 。这儿5.1.2版本的Sonar可以适用1.8版本的汉化包。

   

    把对应的jar包下载会本地后,把它(sonar-l10n-zh-plugin-1.8.jar)拷贝在目录 sonarqube-5.1.2\extensions\plugins

    当配置好数据库源和汉化以后,再重新启动Sonar,这时候时间会多花一些,因为有很多表会初始化到数据库中,成功启动后再登录就可以看到熟悉的中文了。


   Maven工程上传代码检测结果到Sonar服务器

    maven服务的 settings.xml的配置修改

        修改apache-maven-3.2.2\conf文件下面的settings.xml,红色部分对应安装Sonar服务的地址和该Sonar服务所使用的mysql地址和账号信息。因为我是本地和服务器都装了Sonar和对应的数据库,所以我注释掉了一个。

     <profile>
     <id>sonar</id>
     <activation>
         <activeByDefault>true</activeByDefault>
     </activation>
     <properties>
          <sonar.jdbc.url>
          jdbc:mysql://192.168.200.126:3306/sonar?characterEncoding=utf8
          </sonar.jdbc.url>
          <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
          <sonar.jdbc.username>sonar</sonar.jdbc.username>
          <sonar.jdbc.password>sonar</sonar.jdbc.password>
         <sonar.host.url>http://192.168.200.126:9000</sonar.host.url>
		  <!-- <sonar.jdbc.url>
          jdbc:mysql://localhost:3306/sonar?characterEncoding=utf8
          </sonar.jdbc.url>
          <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
          <sonar.jdbc.username>sonar</sonar.jdbc.username>
          <sonar.jdbc.password>sonar</sonar.jdbc.password>
         <sonar.host.url>http://localhost:9000</sonar.host.url> -->
     </properties>
     </profile>

   Maven工程中pom.xml文件的修改

	 <plugin>  
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>sonar-maven-plugin</artifactId>
              <version>2.6</version>  
         </plugin>
    这儿的版本号也很关键,不同的Sonar服务器对应不同的版本,我最开始用Sonar6.3做服务器,执行maven命令的时候不行,最后改成5.1.2后用这个2.6的版本才能启动成功。具体的对应关系还需要实际应用过程中再熟悉。
 

    Maven命令把Maven工程的代码分析上传到Sonar服务器

      mvn clean install 和 mvn sonar:sonar ,这两个命令可以分开执行,也可以连起来一起执行,即可以在eclipse工具中执行也可以在cmd命令行下执行。

     只要保证前面各项配置正确,同时执行命令时Sonar服务器正常运行状态,执行后会把该Maven工程的代码检查结果上传到对应的mysql的sonar数据库中,这个时候刷新Sonar的web管理页面,就可以看到对应工程的情况了。(在我执行命令的过程中,在工程的根目录下面有.svn文件,会报错,不能检查.svn文件夹的文件,我目前也没找到怎么排除不需要检查的文件夹,采用的方式是先手动删除.svn文件夹后就可以正常生成对应的检查数据结果了

  

     到这一步后,就可以愉快的根据Sonar提示的各种信息,进行代码的优化和重构了,同时Sonar也提供了大量的插件来满足各种统计,比较、分析等方面,这方面后续补充!


  安装过程中常见的错误和对应的处理

错误解决

错误1

WrapperSimpleApp: Unable to locate the class org.sonar.application.App:Java.lang.UnsupportedClassVersionError: org/sonar/application/App : Unsupported major.minor version 51.0

解决方法: 
cd sonarqube-5.1.2/conf 
vi wrapper.conf 
linux: 
wrapper.java.command=/opt/jdk1.7.0_80/bin/java 
windows: 
wrapper.java.command=C:\Documents and Settings\Administrator\MyEclipse Professional 2014\binary\com.sun.java.jdk7.win32.x86_1.7.0.u45\bin\java

参考:http://docs.sonarqube.org/display/SONAR/Requirements

错误2

Unsupported major.minor version 51.0 
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7:sonar (default-cli) on project zsale-web: Execution default-cli of goal org.codehaus.mojo:sonar-maven-plugin:2.7:sonar failed: Unable to load the mojo ‘sonar’ in the plugin ‘org.codehaus.mojo:sonar-maven-plugin:2.7’ due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: org/codehaus/mojo/sonar/SonarMojo : Unsupported major.minor version 51.0 
[ERROR] —————————————————– 
[ERROR] realm = plugin>org.codehaus.mojo:sonar-maven-plugin:2.7 
解决方法: 
windows: 
把path的jdk改为java7,并且重启cmd!(很重要),就可以了 
linux: 
vi .bash_profile 
JAVA_HOME=/opt/jdk1.7.0_80 
export JAVA_HOME 
PATH= JAVAHOME/bin: PATH 
export PATH

source $HOME/.bash_profile

错误3

[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7:sonar (default-cli) on project zsale-web: Fail to connect to database: Cannot load JDBC driver class ‘com.mysql.jdbc.Driver’ -> [Help 1]

解决方法: 
把settings.xml里的mysql的配置去掉就成功了 
或者: 
vi sonar.properties 
sonar.jdbc.username=sonar 
sonar.jdbc.password=sonar 
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
改完要重启?

错误4

[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7.1:sonar(default-cli) on project zsale-web: Fail to connect to database: Cannot load JDBC driver class ‘org.h2.Driver’ -> [Help 1]

解决方法: 
settings.xml里也得配置数据库 
cd apache-maven-3.2.5/conf 
vi settings.xml

<profile>
    <id>sonar</id>
    <properties>
        <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar</sonar.jdbc.url>
        <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
        <sonar.jdbc.username>sonar</sonar.jdbc.username>
        <sonar.jdbc.password>sonar</sonar.jdbc.password>
        <sonar.host.url>http://localhost:9000</sonar.host.url>
    </properties>
</profile>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

pom.xml里的jdk可以为1.6

默认密码是admin/admin,保存在表users


错误5

Sonar与MySQL版本不匹配

  这种情况下,可以在log里面看到类似如下这样的内容:  2016.05.18 15:17:37 INFO web[o.a.c.h.Http11NioProtocol] Starting ProtocolHandler ["http-nio-0.0.0.0-9000"] 2016.05.18 15:17:37 INFO web[o.s.s.a.TomcatAccessLog] Web server is started 2016.05.18 15:17:37 INFO web[o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000 2016.05.18 15:17:37 WARN web[o.s.p.ProcessEntryPoint] Fail to start web java.lang.IllegalStateException: Webapp did not start at org.sonar.server.app.EmbeddedTomcat.isUp(EmbeddedTomcat.java:84) ~[sonar-server-5.5.jar:na] at org.sonar.server.app.WebServer.isUp(WebServer.java:48) [sonar-server-5.5.jar:na] at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:105) ~[sonar-process-5.5.jar:na] at org.sonar.server.app.WebServer.main(WebServer.java:69) [sonar-server-5.5.jar:na] 这里没有明显的错误,但是 Google之 才发现与版本有关,笔者一开始使用的SonarQube 5.6并不支持MySQL 5.5。所以需要将SonarQube降到5.4,当然也可以升级MySQL,笔者选择了前者。

  错误6

 虚拟机内存不够

2016.07.18 22:58:26 ERROR web[o.a.c.c.StandardContext] One or more listeners failed to start. Full details will be found in the appropriate container log file 2016.07.18 22:58:26 ERROR web[o.a.c.c.StandardContext] Context [] startup failed due to previous errors 2016.07.18 22:58:26 WARN web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43) 2016.07.18 22:58:26 WARN web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: java.lang.Object.wait(Native Method) java.util.TimerThread.mainLoop(Timer.java:552) java.util.TimerThread.run(Timer.java:505) 如果出现这样的log信息,那是因为SonarQube运行需要的内存不够的原因,缺啥补啥,笔者便将使用的虚拟机运存从512MB增加到1024MB,问题便消失了。

Windows下安装Sonar服务,跟随系统启动

D:\sonarqube-5.3\bin\windows-x86-64\InstallNTService.bat 


启动服务需要配置登录账号密码,即操作系统的登录账号和密码(这里没有配置的话,服务是无法正常启动的)




Sonar插件

1.1、默认安装的插件


SonarQube默认集成了Java Ecosystem插件,该插件是一组插件的合集,包含如下的这些插件:



插件名 
说明 


sonar-java-plugin 
java源代码解析,计算指标等 


sonar-squid-java-plugin 
检查潜在缺陷 


sonar-checkstyle-plugin 
检查代码编写风格 


sonar-findbugs-plugin 
检查潜在缺陷 


sonar-pmd-plugin 
检查潜在缺陷 


sonar-surefire-plugin 
执行单元测试 


sonar-cobertura-plugin 
统计代码覆盖率 


sonar-jacoco-plugin 
统计代码覆盖率 

1.2、常用的插件


下面列出了一些常用的插件:



插件名 
说明 


sonar-javascript-plugin 
JavaScript代码检查 


sonar-python-plugin 
Python代码检查 


sonar-web-plugin 
Web页面检查(HTML、JSP、JSF、Ruby、PHP等) 


sonar-xml-plugin 
XML文件检查 


sonar-scm-stats-plugin 
SCM源码库统计分析 


sonar-metrics-plugin 
文件度量 


sonar-chinese-pack-plugin 
中文语言包 


sonar-timeline-plugin 
时间表显示度量结果 


sonar-motion-chart-plugin 
度量结果演进图 

1.3、安装插件


1.3.1、手动安装


SonarQube插件的下载地址为:http://docs.codehaus.org/display/SONAR/Plugin+Library


将下载后的插件放到${SONAR_HOME}/extensions/plugins目录下,重新启动SonarQube服务器。


1.3.2、通过Update Center安装


打开WEB页面,用户登陆后,进入“Settings”页面,点击左下角的“Update Center”,如下:



其中Available Plugins选项卡提供了可以选择安装的插件,System Updates可以在线更新SonarQube。


下载插件需要注意其中有些插件是需要购买才能使用的,其License类型为Commercial。


结束语

Sonar 为代码的质量管理提供了一个平台,对传统的代码静态检测如 PMD、FindBugs 等工具进行整合,可以说是目前最强大的代码质量管理工具之一。





   

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值