java开发-接入sonar api接口实现代码扫描

本文介绍了在Java开发中如何通过Sonar API实现代码扫描。首先在pom.xml中引入Sonar API依赖,并配置相关参数,然后创建Sonar扫描类,注入属性值,初始化属性,最后执行扫描方法。

前言

本文主要介绍在java开发过程中如何借助sonar api实现代码扫描功能。仅介绍简单引入过程,详细对于sonar api接口的研究后续会进行补充。

引入sonar api步骤

第一步 引入sonar API

1) 在pom.xml中引入sonar API依赖
         <dependency>
                 <groupId>org.sonarsource.scanner.api</groupId>
                 <artifactId>sonar-scanner-api</artifactId>
                 <version>${sonar-scanner-api.version}</version>
             </dependency>
             
             --版本号
             <sonar-scanner-api.version>2.16.2.588</sonar-scanner-api.version>

2) 配置文件中定义sonar相关参数
            sonar:
            host:
              url: http://${SONAR_IP:sonar.yssdata.net}:${SONAR_PORT:20180}/
              token: ${SONAR_TOKEN:0287929a62f7e615aad4e646f23bbc5afed06064}
            api:
              issuesSearch: api/issues/search
              ceActivity: api/ce/activity
              ceTask: api/ce/task
              timeout: 3000                   #http client超时时间
              intervalTime: 500               #睡眠间隔时间:500ms(默认,可调整)
              initWaitTime: 1000              #初始等待时间:1000ms(默认,可调整)
              maxWaitTime: 5000               #最大等待时间:5000ms(默认,可调整)
            scanner:
              appName: AuditPlatformDemo      #EmbeddedScanner: app name
              appVersion: 0.1                 #EmbeddedScanner: app version

第二步 编写sonar扫描类   

1) 注入属性值
          @Value("${sonar.host.url}")
          private String sonarHostUrl;
          @Value("${sonar.scanner.appName}")
          private String appName;
          @Value("${sonar.scanner.appVersion}")
          private String appVersion;
          @Value("${sonar.api.initWaitTime}")
          private int initWaitTime;
          @Value("${sonar.host.token}")
          private String token;
          
          private static final String PROJECT_VERSION = "1.0.0";
          private Map<String, String> sonarProperties;
          
      2) 初始化属性
          private void initSonarProperties() {
            if (sonarProperties == null) {
                sonarProperties = new LinkedHashMap<>(4);
                sonarProperties.put(ScannerProperties.HOST_URL, sonarHostUrl);
                sonarProperties.put(ScanProperties.PROJECT_SOURCE_ENCODING, StandardCharsets.UTF_8.name());
                if(CharSequenceUtil.isNotBlank(token)) {
                    sonarProperties.put("sonar.login", token);
                }
                sonarProperties.put("sonar.scanner.keepReport", "TRUE");
            }
          }
          
      3) 扫描方法
          public void start(StandaloneSqlFile standaloneSqlFile) {
             TimeInterval timer = DateUtil.timer();
             logger.info("start scan file {}", standaloneSqlFile.getFullFilePath());
             initSonarProperties();
             EmbeddedScanner scanner = EmbeddedScanner.create(appName, appVersion, new ScannerLogger());
             scanner.addGlobalProperties(sonarProperties);
             scanner.start();
             scanner.execute(getProjectProperties(standaloneSqlFile));
             logger.info("scan finish {} , took {} . will sleep {} ms ", standaloneSqlFile.getFullFilePath(), timer.intervalPretty(), initWaitTime);
             //初始等待initWaitTime
             ThreadUtil.safeSleep(initWaitTime);
         }

       4)获取项目属性信息
          private Map<String, String> getProjectProperties(StandaloneSqlFile standaloneSqlFile) {
             Map<String, String> projectProperties = new LinkedHashMap<>(6);
             projectProperties.put(ScanProperties.PROJECT_KEY, standaloneSqlFile.getDirName() + standaloneSqlFile.getFileName());
             projectProperties.put(ScanProperties.PROJECT_NAME, standaloneSqlFile.getDirName() + standaloneSqlFile.getFileName());
             projectProperties.put(ScanProperties.PROJECT_VERSION, PROJECT_VERSION);
             projectProperties.put(ScanProperties.PROJECT_BASEDIR, standaloneSqlFile.getFileDir());
             projectProperties.put(ScanProperties.PROJECT_SOURCE_DIRS, standaloneSqlFile.getFileDir());
             projectProperties.put(ScanProperties.PROJECT_SOURCE_ENCODING, StandardCharsets.UTF_8.name());
             logger.info("project properties:{}", projectProperties);
             return projectProperties;
         }

          

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值