前言
本文主要介绍在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;
}
本文介绍了在Java开发中如何通过Sonar API实现代码扫描。首先在pom.xml中引入Sonar API依赖,并配置相关参数,然后创建Sonar扫描类,注入属性值,初始化属性,最后执行扫描方法。
3783

被折叠的 条评论
为什么被折叠?



