gpt4 book ai didi

java - 仅当扫描仪参数设置时,SonarQube 插件后分析任务

转载 作者:行者123 更新时间:2023-12-02 01:24:39 27 4
gpt4 key购买 nike

我正在为 SonarQube 开发一个插件,它将运行自定义后期分析任务,但仅如果向 sonar-scanner 命令提供了命名扫描仪参数。我可以做这样的事情吗?

public class MyPlugin implements Plugin {
@Override
public void define(Context context) {
context.addExtension(MyPostAnalysisTask.class);
}
}

public class MyPostAnalysisTask implements PostProjectAnalysisTask, Sensor {

private String param = "";

@Override
public void describe(SensorDescriptor descriptor) {
descriptor.name(getClass().getName());
}

@Override
public void execute(SensorContext context) {
// Get command line param.
Optional<String> param = context.config().get('my.param.name');
if (param.isPresent()) {
this.param = param.get();
}
}

@Override
public void finished(final ProjectAnalysis analysis) {
if (!this.param.isEmpty()) {
// Perform custom post analysis task.
}
}
}

我不熟悉插件对象的范围/生命周期。它们在每次扫描或每个 SonarQube 服务器实例中都是唯一的吗?

最佳答案

传感器是扫描仪侧的扩展点。它将在构建代理的分析过程中运行。PostProjectAnalysisTask 是一个服务器端扩展点,将在分析报告处理结束时实例化/调用。您无法像使用类属性那样共享状态,因为在运行时两个类将在不同的 JVM 上实例化。

我认为最好在单独的类中实现两个扩展点,并使用扫描仪上下文在扫描仪端和服务器端之间传递值:

public class MyPlugin implements Plugin {
@Override
public void define(Context context) {
context.addExtensions(
MySensor.class,
MyPostAnalysisTask.class);
}
}

public class MySensor implements Sensor {

@Override
public void describe(SensorDescriptor descriptor) {
descriptor.name(getClass().getName());
}

@Override
public void execute(SensorContext context) {
// Get command line param.
Optional<String> param = context.config().get("my.param.name");
if (param.isPresent()) {
context.addContextProperty("my.context.key", param.get());
}
}
}

public class MyPostAnalysisTask implements PostProjectAnalysisTask {

@Override
public void finished(final ProjectAnalysis analysis) {
if (analysis.getScannerContext().getProperties().containsKey("my.context.key")) {
// Perform custom post analysis task.
}
}
}

关于java - 仅当扫描仪参数设置时,SonarQube 插件后分析任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57118710/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com