- Versions used (SonarQube, Scanner, Plugin, and any relevant extension)
- SonarQube Community Edition 9.0.1 (build 46107)
- SonarScanner 4.6.2.2472
- Java 11.0.11 AdoptOpenJDK (64-bit)
- Linux 3.10.0-1160.31.1.el7.x86_64 amd64
- Error observed (wrap logs/code around triple quote ``` for proper formatting)
Exception log
16:27:12 ERROR: Unable to run check class org.sonar.java.filters.PostAnalysisIssueFilter - on file 'test-dispatch-service-provider/src/main/java/com/test/dispatch/service/provider/strategy/DispatchListener.java', To help improve the SonarSource Java Analyzer, please report this problem to SonarSource: see https://community.sonarsource.com/
16:27:12 java.lang.NullPointerException: null
16:27:12 at org.eclipse.jdt.core.dom.MethodBinding.filterTypeAnnotations(MethodBinding.java:244)
16:27:12 at org.eclipse.jdt.core.dom.MethodBinding.getAnnotations(MethodBinding.java:133)
16:27:12 at org.sonar.java.model.JSymbol.convertMetadata(JSymbol.java:353)
16:27:12 at org.sonar.java.model.JSymbol.metadata(JSymbol.java:333)
16:27:12 at org.sonar.java.filters.GeneratedCodeFilter.isGenerated(GeneratedCodeFilter.java:55)
16:27:12 at org.sonar.java.filters.GeneratedCodeFilter.visitMethod(GeneratedCodeFilter.java:48)
16:27:12 at org.sonar.java.model.declaration.MethodTreeImpl.accept(MethodTreeImpl.java:231)
16:27:12 at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:40)
16:27:12 at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:34)
16:27:12 at org.sonar.plugins.java.api.tree.BaseTreeVisitor.visitClass(BaseTreeVisitor.java:70)
16:27:12 at org.sonar.java.filters.GeneratedCodeFilter.visitClass(GeneratedCodeFilter.java:43)
16:27:12 at org.sonar.java.model.declaration.ClassTreeImpl.accept(ClassTreeImpl.java:197)
16:27:12 at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:40)
16:27:12 at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:34)
16:27:12 at org.sonar.plugins.java.api.tree.BaseTreeVisitor.visitCompilationUnit(BaseTreeVisitor.java:52)
16:27:12 at org.sonar.java.model.JavaTree$CompilationUnitTreeImpl.accept(JavaTree.java:196)
16:27:12 at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:40)
16:27:12 at org.sonar.java.filters.AnyRuleIssueFilter.scanFile(AnyRuleIssueFilter.java:45)
16:27:12 at org.sonar.java.filters.GeneratedCodeFilter.scanFile(GeneratedCodeFilter.java:35)
16:27:12 at org.sonar.java.filters.PostAnalysisIssueFilter.lambda$scanFile$1(PostAnalysisIssueFilter.java:56)
16:27:12 at java.base/java.util.Arrays$ArrayList.forEach(Unknown Source)
16:27:12 at java.base/java.util.Collections$UnmodifiableCollection.forEach(Unknown Source)
16:27:12 at org.sonar.java.filters.PostAnalysisIssueFilter.scanFile(PostAnalysisIssueFilter.java:56)
16:27:12 at org.sonar.java.model.VisitorsBridge.lambda$runScanner$0(VisitorsBridge.java:151)
16:27:12 at org.sonar.java.model.VisitorsBridge.runScanner(VisitorsBridge.java:156)
16:27:12 at org.sonar.java.model.VisitorsBridge.runScanner(VisitorsBridge.java:151)
16:27:12 at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:134)
16:27:12 at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:132)
16:27:12 at org.sonar.java.ast.JavaAstScanner.lambda$scan$1(JavaAstScanner.java:83)
16:27:12 at org.sonar.java.model.JParserConfig$FileByFile.parse(JParserConfig.java:223)
16:27:12 at org.sonar.java.ast.JavaAstScanner.scan(JavaAstScanner.java:81)
16:27:12 at org.sonar.java.JavaFrontend.scanAndMeasureTask(JavaFrontend.java:118)
16:27:12 at org.sonar.java.JavaFrontend.scan(JavaFrontend.java:108)
16:27:12 at org.sonar.plugins.java.JavaSensor.execute(JavaSensor.java:109)
16:27:12 at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:48)
16:27:12 at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:85)
16:27:12 at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:59)
16:27:12 at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77)
16:27:12 at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:59)
16:27:12 at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:79)
16:27:12 at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137)
16:27:12 at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123)
16:27:12 at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:382)
16:27:12 at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:378)
16:27:12 at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:347)
16:27:12 at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137)
16:27:12 at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123)
16:27:12 at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:136)
16:27:12 at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137)
16:27:12 at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123)
16:27:12 at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:72)
16:27:12 at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:66)
16:27:12 at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
16:27:12 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
16:27:12 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
16:27:12 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
16:27:12 at java.base/java.lang.reflect.Method.invoke(Unknown Source)
16:27:12 at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
16:27:12 at com.sun.proxy.$Proxy0.execute(Unknown Source)
16:27:12 at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
16:27:12 at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
16:27:12 at org.sonarsource.scanner.cli.Main.execute(Main.java:112)
16:27:12 at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
16:27:12 at org.sonarsource.scanner.cli.Main.main(Main.java:61)
Cause Exception Class
package com.test.dispatch.service.provider.strategy;
import com.alibaba.fastjson.JSON;
import com.test.common.spring.util.RedisLockHelper;
import com.test.dispatch.service.api.enums.DicSummaryEnum;
import com.test.dispatch.service.api.enums.DicTypeEnum;
import com.test.dispatch.service.api.enums.RedisKeyPreFixEnum;
import com.test.dispatch.service.api.vo.response.task.schedule.TaskScheduleSimpleVO;
import com.test.dispatch.service.provider.model.*;
import com.test.dispatch.service.provider.service.*;
import com.test.dispatch.service.provider.strategy.event.DispatchTriggerEvent;
import com.test.dispatch.service.provider.strategy.event.UpdateAppAuthEvent;
import com.test.dispatch.service.provider.strategy.util.HolidayTimePeriodUtils;
import com.test.dispatch.service.provider.strategy.vo.AppTypePriorityVO;
import com.test.dispatch.service.provider.strategy.vo.dispatch.DispatchDataInfoVO;
import com.test.dispatch.service.provider.strategy.vo.dispatch.DispatchParamsVO;
import com.test.dispatch.service.provider.strategy.vo.dispatch.DispatchResultVO;
import com.test.dispatch.service.provider.strategy.vo.working.HolidayMonthVO;
import com.test.dispatch.service.provider.strategy.vo.working.TimePeriodVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.concurrent.AtomicSafeInitializer;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.event.EventListener;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.core.BoundZSetOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
@Slf4j
@Component
public class DispatchListener implements ApplicationContextAware {
private static final String DISPATCH_KEY = RedisKeyPreFixEnum.LOCK_KEY_PREFIX + "STRATEGY_EXECUTE";
private final AtomicSafeInitializer<Map<String, DispatchStrategy>> dispatchStrategyInitializer;
private ApplicationContext applicationContext;
@Lazy
@Autowired
private AppService appService;
@Autowired
private StrategyService strategyService;
@Autowired
private DicConfigService dicConfigService;
@Autowired
private EngineConfigService engineConfigService;
@Autowired
private DispatchDataService dispatchDataService;
@Autowired
private AppTimePeriodService appTimePeriodService;
@Autowired
private AppHolidayService appHolidayService;
@Resource
private AppConfigService appConfigService;
@Autowired
private ApplicationEventPublisher publisher;
@Resource(name = "dbExecutor")
private ThreadPoolTaskExecutor executor;
@Resource(name = "eventExecutor")
private ThreadPoolTaskExecutor eventExecutor;
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private AppRateService appRateService;
@Autowired
private RedisLockHelper redisLockHelper;
@Autowired
private TaskScheduleService taskScheduleService;
@Autowired
private Environment environment;
@Override
public void setApplicationContext(@NotNull ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
{
dispatchStrategyInitializer = new AtomicSafeInitializer<Map<String, DispatchStrategy>>(){
@Override
protected Map<String, DispatchStrategy> initialize(){
return applicationContext.getBeansOfType(DispatchStrategy.class);
}
};
}
@EventListener
public Future<List<DispatchDataInfoVO>> onApplicationEvent(DispatchTriggerEvent event) {
//触发调度时,使用event线程池,仅保留最新的一条
if (event.getScene() == 1) {
return eventExecutor.submit(() -> {
try {
return dealApplicationEvent(event);
} catch (Exception e) {
log.error("执行调度策略出错,入参:{}", toJsonString(event));
log.error("", e);
return Collections.emptyList();
}
});
}else {
try {
List<DispatchDataInfoVO> list = dealApplicationEvent(event);
return AsyncResult.forValue(list);
} catch (Exception e) {
log.error("执行调度策略出错,入参:{}", toJsonString(event));
log.error("", e);
return AsyncResult.forExecutionException(e);
}
}
}
private String toJsonString(Object o) {
return JSON.toJSONStringWithDateFormat(o, "yyyy-MM-ddHH:mm:ss");
}
private List<DispatchDataInfoVO> dealApplicationEvent(DispatchTriggerEvent event) throws Exception {
log.info("dispatch start");
long start = System.currentTimeMillis();
List<DispatchDataInfoVO> list = Collections.emptyList();
BoundZSetOperations<String, String> zSetOps = redisTemplate.boundZSetOps(DISPATCH_KEY);
Double score = null;
try {
if (!ArrayUtils.contains(environment.getActiveProfiles(),"local") && event.getScene() == 1) {
zSetOps.add(JSON.toJSONString(event), event.getTimestamp());
redisLockHelper.lock(DISPATCH_KEY, 10);
Set<ZSetOperations.TypedTuple<String>> tuples = zSetOps.reverseRangeWithScores(0, 0);
if (CollectionUtils.isEmpty(tuples)){
return list;
}
ZSetOperations.TypedTuple<String> next = tuples.iterator().next();
score = next.getScore();
//所有小于当前最大值的调度线程,不进行调度,直接返回
if (score != null && score > event.getTimestamp()){
return list;
}
}
DispatchParamsVO vo = new DispatchParamsVO();
vo.setEvent(event);
CountDownLatch latch = new CountDownLatch(9);
Map<String, DispatchStrategy> dispatchStrategyMap = dispatchStrategyInitializer.get();
Map<Long, Map<Integer, Integer>> mapMap = new HashMap<>();
Map<Long, Set<App>> strategyAppMap = new HashMap<>(dispatchStrategyMap.size());
Map<Long, DispatchStrategy> strategyMap = new HashMap<>(dispatchStrategyMap.size());
log.info("dispatch start db query...");
long dbQueryStart = System.currentTimeMillis();
executor.execute(()->{ initMaxAuth(vo); latch.countDown();});
executor.execute(()->{ initSendErrorMails(vo); latch.countDown();});
executor.execute(()->{ initTimePeriodMap(vo); latch.countDown();});
executor.execute(()->{ initHolidayMap(event, vo); latch.countDown();});
executor.execute(()->{ initAppConfigMap(vo); latch.countDown();});
executor.execute(()->{ initAppTypePriorityMap(mapMap); latch.countDown();});
executor.execute(()->{ initStrategyAppMap(strategyAppMap); latch.countDown();});
executor.execute(()->{ initAppRate(vo); latch.countDown();});
executor.execute(()->{ initAppLastWorkloadMap(vo); latch.countDown();});
Future<List<Strategy>> futureStrategyList = executor.submit(() -> {
List<Strategy> strategyList = strategyService.findAll();
//调度策略按照优先级排序
strategyList.sort(Comparator.comparing(Strategy::getPriority));
for (Strategy strategy : strategyList) {
strategyMap.put(strategy.getId(), dispatchStrategyMap.get(strategy.getBean_name()));
}
return strategyList;
});
//是否一键还原
String value = dicConfigService.getValueByCode(DicTypeEnum.SYSTEM_CODE, DicSummaryEnum.DISPATCH_RESET);
boolean dispatchReset = Boolean.parseBoolean(value.trim());
log.debug("dispatch db query, wait latch...");
latch.await(5, TimeUnit.SECONDS);
log.info("dispatch end db query..., {} ms", System.currentTimeMillis() - dbQueryStart);
//正常调度时
if (!dispatchReset){
List<Strategy> strategyList = futureStrategyList.get(5, TimeUnit.SECONDS);
for (Strategy strategy : strategyList) {
Set<App> apps = strategyAppMap.get(strategy.getId());
if (CollectionUtils.isEmpty(apps)){
continue;
}
int priority = strategy.getPriority() == null ? Integer.MAX_VALUE : strategy.getPriority();
//根据策略进行调度
list = doDispatchByStrategy(list, vo, priority, apps,
mapMap.get(strategy.getId()), strategyMap.get(strategy.getId()));
}
//一键还原时
}else {
Set<App> apps = new HashSet<>();
for (Set<App> set : strategyAppMap.values()) {
apps.addAll(set);
}
//根据策略进行调度
list = doDispatchByStrategy(list, vo, -1, apps,
null, dispatchStrategyMap.get(DispatchStrategy.RESET_DISPATCH_STRATEGY_NAME));
}
//根据场景,选择是否存储调度计划数据,并触发更新应用授权任务
saveAndPublishEvent(list, event.getScene());
} finally {
log.info("dispatch end, {} ms", System.currentTimeMillis() - start);
if (!ArrayUtils.contains(environment.getActiveProfiles(),"local") && (event == null || event.getScene() == 1)) {
if (score != null && score > 0) {
//1、丢弃所有过期请求,只保留最新的调度事件;2、score - 1 避免比最大时间戳小的事件不执行时候,把最大的也删除导致最终不执行
zSetOps.removeRangeByScore(0, score-1);
}
redisLockHelper.unlock(DISPATCH_KEY);
}
}
return list;
}
private void initAppLastWorkloadMap(DispatchParamsVO vo) {
long start = System.currentTimeMillis();
List<TaskScheduleSimpleVO> list = taskScheduleService.getTaskLastTime();
Map<Long, Long> appLastWorkloadMap = new HashMap<>(list.size());
for (TaskScheduleSimpleVO simpleVO : list) {
appLastWorkloadMap.put(simpleVO.getApp_id(), simpleVO.getLast_num());
}
vo.setAppLastWorkloadMap(appLastWorkloadMap);
log.debug("dispatch end initAppLastWorkloadMap..., {} ms", System.currentTimeMillis() - start);
}
private void initAppRate(DispatchParamsVO vo) {
long start = System.currentTimeMillis();
Map<Long, AppRate> appRateMap = new HashMap<>();
List<AppRate> list = appRateService.findAll();
for (AppRate appRate : list) {
appRateMap.put(appRate.getApp_id(), appRate);
}
vo.setAppRateMap(appRateMap);
log.debug("dispatch end initAppRate..., {} ms", System.currentTimeMillis() - start);
}
private List<DispatchDataInfoVO> doDispatchByStrategy(List<DispatchDataInfoVO> list, DispatchParamsVO vo,
Integer priority, Set<App> apps,
Map<Integer, Integer> priorityMap, DispatchStrategy strategy) throws Exception {
String name = strategy.getClass().getName();
log.info("dispatch strategy {} execute start", name);
long start = System.currentTimeMillis();
vo.updateStrategyData(apps, priority, priorityMap, list);
DispatchResultVO resultVO = strategy.dispatch(vo);
log.info("dispatch strategy {} execute end, {} ms", name, System.currentTimeMillis() - start);
return resultVO.getDispatchDataList();
}
private void initAppTypePriorityMap(Map<Long, Map<Integer, Integer>> mapMap) {
long start = System.currentTimeMillis();
List<AppTypePriorityVO> appTypePriorityList = strategyService.findAppTypePriority();
for (AppTypePriorityVO priorityVO : appTypePriorityList) {
Map<Integer, Integer> appTypePriorityMap = mapMap.computeIfAbsent(priorityVO.getStrategy_id(), k -> new HashMap<>());
appTypePriorityMap.put(priorityVO.getApp_type(), priorityVO.getPriority());
}
log.debug("dispatch end initAppTypePriorityMap..., {} ms", System.currentTimeMillis() - start);
}
private void initAppConfigMap(DispatchParamsVO vo) {
long start = System.currentTimeMillis();
Map<String, AppConfig> configMap = HolidayTimePeriodUtils.getAppConfigMap(appConfigService);
vo.setConfigMap(configMap);
log.debug("dispatch end initAppConfigMap..., {} ms", System.currentTimeMillis() - start);
}
private void initHolidayMap(DispatchTriggerEvent event, DispatchParamsVO vo) {
long start = System.currentTimeMillis();
Map<String, HolidayMonthVO> holidayMap = HolidayTimePeriodUtils.getHolidayMap(appHolidayService, event.getBeginTime(), event.getEndTime());
vo.setHolidayMap(holidayMap);
log.debug("dispatch end initHolidayMap..., {} ms", System.currentTimeMillis() - start);
}
private void initTimePeriodMap(DispatchParamsVO vo) {
long start = System.currentTimeMillis();
Map<String, List<TimePeriodVO>> timePeriodMap = HolidayTimePeriodUtils.getTimePeriodMap(appTimePeriodService);
vo.setTimePeriodMap(timePeriodMap);
log.debug("dispatch end initTimePeriodMap..., {} ms", System.currentTimeMillis() - start);
}
private void initStrategyAppMap(Map<Long, Set<App>> map) {
long start = System.currentTimeMillis();
List<App> allApps = appService.findAllApps();
for (App app : allApps) {
Set<App> apps = map.computeIfAbsent(app.getStrategy_id(), k -> new HashSet<>());
apps.add(app);
}
log.debug("dispatch end initStrategyAppMap..., {} ms", System.currentTimeMillis() - start);
}
private void initMaxAuth(DispatchParamsVO vo) {
long start = System.currentTimeMillis();
EngineConfig config = engineConfigService.getIFlyTotal();
int maxAuth = 0;
if (config != null ) {
maxAuth = config.getAuth();
}
vo.setMaxAuth(maxAuth);
log.debug("dispatch end initMaxAuth..., {} ms", System.currentTimeMillis() - start);
}
private void initSendErrorMails(DispatchParamsVO vo) {
long start = System.currentTimeMillis();
String value = dicConfigService.getValueByCode(DicTypeEnum.SYSTEM_CODE, DicSummaryEnum.SEND_ERROR_MAILS);
vo.setSendErrorMails(Boolean.parseBoolean(value.trim()));
log.debug("dispatch end initSendErrorMails..., {} ms", System.currentTimeMillis() - start);
}
private void saveAndPublishEvent(List<DispatchDataInfoVO> dispatchDataList, Integer scene) {
long start = System.currentTimeMillis();
if (CollectionUtils.isNotEmpty(dispatchDataList)) {
if (scene == 1) {
dispatchDataList.sort(Comparator.comparingLong(DispatchDataInfoVO::getApp_id)
.thenComparing(DispatchDataInfoVO::getStart_time));
dispatchDataService.batchUpdate(dispatchDataList);
publisher.publishEvent(new UpdateAppAuthEvent(this));
}
}
log.info("dispatch end saveAndPublishEvent..., {} ms", System.currentTimeMillis() - start);
}
}
- Steps to reproduce
use jenkins build maven project. - Potential workaround
- Scanner command used when applicable (private details masked)
16:26:59 [测试-02-dispatch-service-provider] $ /opt/sonar-scanner/bin/sonar-scanner -Dsonar.host.url=http://localhost:9000 ******** -Dsonar.language=java -Dsonar.projectName=测试-test-dispatch-service-provider -Dsonar.projectVersion=1.0 -Dsonar.sourceEncoding=UTF-8 -Dsonar.projectKey=test-test-dispatch-service-provider -Dsonar.java.binaries=/data/jenkins/workspace/测试-02-dispatch-service-provider -Dsonar.sources=/data/jenkins/workspace/测试-02-dispatch-service-provider -Dsonar.projectBaseDir=/data/jenkins/workspace/测试-02-dispatch-service-provider
16:26:59 INFO: Scanner configuration file: /opt/sonar-scanner/conf/sonar-scanner.properties
16:26:59 INFO: Project root configuration file: NONE
16:26:59 INFO: SonarScanner 4.6.2.2472
16:26:59 INFO: Java 11.0.11 AdoptOpenJDK (64-bit)
16:26:59 INFO: Linux 3.10.0-1160.31.1.el7.x86_64 amd64
16:27:00 INFO: User cache: /root/.sonar/cache
16:27:00 INFO: Scanner configuration file: /opt/sonar-scanner/conf/sonar-scanner.properties
16:27:00 INFO: Project root configuration file: NONE
16:27:00 INFO: Analyzing on SonarQube server 9.0.1
16:27:00 INFO: Default locale: "en_US", source code encoding: "UTF-8"
16:27:00 INFO: Load global settings
16:27:00 INFO: Load global settings (done) | time=177ms
16:27:00 INFO: Server id: 11FCB4FF-AXsU4r-nRZSK55mItaCz
16:27:00 INFO: User cache: /root/.sonar/cache
16:27:00 INFO: Load/download plugins
16:27:00 INFO: Load plugins index
16:27:00 INFO: Load plugins index (done) | time=103ms
16:27:00 INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
16:27:00 INFO: Load/download plugins (done) | time=171ms
16:27:01 INFO: Process project properties
16:27:01 INFO: Process project properties (done) | time=8ms
16:27:01 INFO: Execute project builders
16:27:01 INFO: Execute project builders (done) | time=1ms
16:27:01 INFO: Project key: test-test-dispatch-service-provider
16:27:01 INFO: Base dir: /data/jenkins/workspace/测试-02-dispatch-service-provider
16:27:01 INFO: Working dir: /data/jenkins/workspace/测试-02-dispatch-service-provider/.scannerwork
16:27:01 INFO: Load project settings for component key: 'test-test-dispatch-service-provider'
16:27:01 INFO: Auto-configuring with CI 'Jenkins'
16:27:01 INFO: Load quality profiles
16:27:01 INFO: Load quality profiles (done) | time=306ms
16:27:01 INFO: Auto-configuring with CI 'Jenkins'
- In case of SonarCloud:
- ALM used (GitHub, Bitbucket Cloud, Azure DevOps)
- CI system used (Bitbucket Cloud, Azure DevOps, Travis CI, Circle CI, Jenkins, other)
Jenkins