Scala代码检查

Scala代码检查

引言

通常我们用Sonar做代码检查,本文将阐述如何使用sonar做sbt scala工程的代码检查。

Sonar安装

起先我从官网下载Sonar安装,发现有很多版本,而且有元数据库的依赖(新版本不支持Mysql),其中自带的elasticsearch也遇到问题(不能在root账户下启动),花了半天时间才安装好,很费事。

建议Docker安装,sonar-scala-docker有比较详细的说明。大致步骤:

docker pull mwizner/sonarqube-scala-plugins:5.5.0-full

//这一步需要点时间
docker run -p 80:9000   mwizner/sonarqube-scala-plugins:latest-full

启动好后打开http://localhost。

admin登录后创建一个自己的工程,例如下边用到的 datasync

Sbt-Sonar

通常我们使用Idea开发,这里我们不必去安装Sonarlink-plugin,参考scala-sonargithub地址样例地址(包含了单项目的和多项目的样例)。

大致步骤:

  1. plugins.sbt中加入plugin

    addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.1")
    
    addSbtPlugin("com.github.mwz" % "sbt-sonar" % "2.2.0")
    
    //可以不加scapegoat,不过它更丰富的代码检查Case
    addSbtPlugin("com.sksamuel.scapegoat" % "sbt-scapegoat" % "1.1.0")
    
  2. build.sbt中加入配置

    // 以一个带有子工程的为例
    import sbtsonar.SonarPlugin.autoImport.sonarProperties
    
    scapegoatVersion in ThisBuild := "1.3.9"
    
    lazy val sonarSettings = Seq(sonarProperties ++= Map(
      "sonar.projectName" -> "datasync",//和在sonar上定义的project名称一致
      "sonar.modules" -> "datasync-api,datasync-model,datasync-service",//根据子工程而定
      "datasync-api.sonar.projectName" -> "api",
      "datasync-model.sonar.projectName" -> "model",
      "datasync-service.sonar.projectName" -> "service",
      "sonar.projectKey" -> "datasync",
      "sonar.sources" -> "src/main/scala",
      "sonar.java.binaries"->"target/scala-2.12",//一般需要指定,有可能会有部分Java代码
      "sonar.tests" -> "src/test/scala",
      "sonar.junit.reportPaths" -> "target/test-reports",
      "sonar.sourceEncoding" -> "UTF-8",
      "sonar.scala.scoverage.reportPath" -> "target/scala-2.12/scoverage-report/scoverage.xml",
      "sonar.scala.scapegoat.reportPath" -> "target/scala-2.12/scapegoat-report/scapegoat.xml"
    ))
    
    // 前提是增加了Scapegoat plugin
    // 如果不想代码分析时因为Error失败,则添加下边配置调整级别
    // 经过验证这个配置放在父工程中的build.sbt上不全局生效,也不能加in ThisBuild,遇到error还是会失败。如果明确需要指定的子工程调整级别,则在对应子工程build.sbt上添加。
    scalacOptions in Scapegoat += "-P:scapegoat:overrideLevels:TraversableHead=Warning:OptionGet=Warning"
    
    

    Scapegoat详细的规则描述可以参考Github

  3. 运行代码分析

    sbt -Dsonar.host.url=http://localhost clean coverage coverageReport scapegoat sonarScan
    
  4. 界面查看

    登录http://localhost。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值