2016-03-09 3 views
3

Я пытаюсь разработать плагин SonarQube. Я сконфигурировал и установил SonarQube 5.3, и я использую программу SonarQube Scanner 2.5 для анализа проекта с помощью SonarQube. Я сделал образец с классом RandomMeasureComputer внедрение MeasureComputer для агрегирования мер.МераКомпьютерные расширения, не вызываемые в плагине SonarQube

public class RandomMeasureComputer implements MeasureComputer { 

@Override 
public MeasureComputerDefinition define(MeasureComputerDefinitionContext defContext) { 
return defContext.newDefinitionBuilder() 
    .setOutputMetrics(ExampleMetrics.RANDOMMETRIC.getKey()) 
    .build(); 
} 

    @Override 
public void compute(MeasureComputerContext context) { 
// This method is executed on the whole tree of components. 
// Bottom-up traversal : files -> directories -> modules -> project 

double value; 
if (context.getComponent().getType() == Component.Type.FILE) { 
    // set a random value on files 
    value = RandomUtils.nextDouble(); 
} else { 
    // directory, module or project: sum values of children 
    value = 0.0; 
    for (Measure childMeasure : context.getChildrenMeasures(ExampleMetrics.RANDOMMETRIC.getKey())) { 
    value += childMeasure.getDoubleValue(); 
    } 
} 
context.addMeasure(ExampleMetrics.RANDOMMETRIC.getKey(), value); 
} 

@Override 
public String toString() { 
return getClass().getSimpleName(); 
} 
} 

Я также добавил этот класс в методе org.sonar.api.SonarPlugin # getExtensions().

public final class ExamplePlugin extends SonarPlugin { 
@Override 
public List getExtensions() { 
List extensions = new ArrayList(); 
extensions.addAll(ExampleProperties.definitions()); 

extensions.add(ExampleMetrics.class); 


extensions.addAll(asList(FooLintRulesDefinition.class, FooLintProfile.class, MyCustomJavaRulesDefinition.class)); 


extensions.addAll(asList(ExampleSensor.class, RandomMeasureComputer.class, IssueSensor.class, ListAllIssuesPostJob.class, FooLintIssuesLoaderSensor.class)); 


return extensions; 
} 
} 

Но когда я пытаюсь проанализировать проект с моим SonarQube плагин я не получаю вызов внутри класса RandomMeasureComputer.

Я прошел через http://docs.sonarqube.org/display/DEV/Developing+Plugins, но Я не уверен, что я пропустил. Пожалуйста, помогите мне с этим.

+1

Вы проверили логи на стороне сервера [Background Task] (HTTP: // документы. sonarqube.org/display/SONAR/Background+Tasks), соответствующий вашему анализу? Здесь используется * MeasureComputer *. –

+0

Спасибо за комментарий, я не знал о журналах фоновых задач, теперь я проверил фоновые журналы и компьютеры с мерами. Я действительно смутился, так как не получал отладочный вызов в моем классе, пока я отлаживал плагин. Невозможно отладить класс реализации Computer Computer? – bhavanak

+0

Да, можно отладить класс MeasureComputer. Для этого вам нужно поместить сервер в DEBUG: установите в файле sonar.properties следующий параметр: sonar.web.javaAdditionalOpts = -agentlib: jdwp = transport = dt_socket, server = y, suspend = n, address = 8001 –

ответ

1

Начиная с SonarQube 5.2, анализ проекта запускает Background Task со стороны сервера. Измерение компьютера выполняется в рамках этой задачи на стороне сервера, что объясняет, почему вы не видите свой класс, вызываемый на стороне клиента (где выполняется анализ).

Для отладки на стороне сервера, от Julien L. вклада:

Да, можно отладить класс MeasureComputer. Для этого необходимо поставить сервер в DEBUG: установите следующий параметр в файле sonar.properties: sonar.web.javaAdditionalOpts=-agentlib:jdwp=transport=dt_socket,server=y,suspend‌​=n,address=8001

Смежные вопросы