SonarQube 在 RulesDefinition 中得到 属性
SonarQube get property in RulesDefinition
我正在尝试访问我的 SonarQube 插件的 class 扩展 RulesDefinition
中的 Property
。
我在 class 中定义 属性 扩展 SonarPlugin
与:
@Properties(
@Property(key="sonar.root.path", name="Path to installation", description = "Root directory of the Master plugin installation directory")
)
属性 已正确创建,我在 SQ 的配置页面中设置了它的值,但不知何故我无法从 class 扩展 RulesDefinition
访问它覆盖 define(Context context)
方法:
// Get access to the Properties
Settings settings = new Settings(new PropertyDefinitions(new MyPlugin()));
if(settings.hasKey("sonar.root.path")) {
// Never enters here
String path = settings.getString("sonar.root.path");
} else {
// If always returns false and enters here
LOG.info("No property defined with the provided key.");
}
// To double-check
LOG.info("The value: " + settings.getString("sonar.root.path")); // Returns null
LOG.info("Has default value: " + settings.hasDefaultValue("sonar.root.path"));
// Returns false, or true if I provide a default value, proving it can
// access the property - so the if condition above should have returned true
奇怪的是我已经通过 REST Web 服务检查了 属性 并且可以确认显示的值是网页中设置的值,但是如果我提供默认值(比如如上所述)日志显示默认值而不是在网页中输入的值(并通过 Web 服务显示)。
也许问题出在我获取 Settings
对象的方式上。将不胜感激提供的任何帮助。
提前致谢。
组件设置由核心实例化,必须通过构造函数参数注入到您的对象中:
public class YourRulesDefinition implements RulesDefinition {
private final Settings settings;
public YourRulesDefinition(Settings s) {
this.settings = s;
}
void yourMethod() {
if(settings.hasKey("sonar.root.path")) {
// ...
}
}
}
请注意,您永远不应实例化核心 类。它们始终可以通过构造函数注入获得。
我正在尝试访问我的 SonarQube 插件的 class 扩展 RulesDefinition
中的 Property
。
我在 class 中定义 属性 扩展 SonarPlugin
与:
@Properties(
@Property(key="sonar.root.path", name="Path to installation", description = "Root directory of the Master plugin installation directory")
)
属性 已正确创建,我在 SQ 的配置页面中设置了它的值,但不知何故我无法从 class 扩展 RulesDefinition
访问它覆盖 define(Context context)
方法:
// Get access to the Properties
Settings settings = new Settings(new PropertyDefinitions(new MyPlugin()));
if(settings.hasKey("sonar.root.path")) {
// Never enters here
String path = settings.getString("sonar.root.path");
} else {
// If always returns false and enters here
LOG.info("No property defined with the provided key.");
}
// To double-check
LOG.info("The value: " + settings.getString("sonar.root.path")); // Returns null
LOG.info("Has default value: " + settings.hasDefaultValue("sonar.root.path"));
// Returns false, or true if I provide a default value, proving it can
// access the property - so the if condition above should have returned true
奇怪的是我已经通过 REST Web 服务检查了 属性 并且可以确认显示的值是网页中设置的值,但是如果我提供默认值(比如如上所述)日志显示默认值而不是在网页中输入的值(并通过 Web 服务显示)。
也许问题出在我获取 Settings
对象的方式上。将不胜感激提供的任何帮助。
提前致谢。
组件设置由核心实例化,必须通过构造函数参数注入到您的对象中:
public class YourRulesDefinition implements RulesDefinition {
private final Settings settings;
public YourRulesDefinition(Settings s) {
this.settings = s;
}
void yourMethod() {
if(settings.hasKey("sonar.root.path")) {
// ...
}
}
}
请注意,您永远不应实例化核心 类。它们始终可以通过构造函数注入获得。