Commons lang StringUtils isNotBlank方法仍然会引发NPE



Sonar支持commons lang StringUtils吗?

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>

环境:

INFO: SonarQube Scanner 3.2.0.1227
INFO: Java 1.8.0_121 Oracle Corporation (64-bit)
INFO: Linux 4.19.2-1.el7.elrepo.x86_64 amd64

社区版7.6版(内部版本21501(重现此问题的代码:

public class DetectorImport {
public String check1(Nonentity nonentity) {
String s;
if(nonentity == null) {
s = null;
}else {
s = nonentity.getName();
}
if(StringUtils.isNotBlank(s)) {
s = s.replaceAll("(", "(");
}
return s;
}
}

在这个声纳谷歌小组中,提到了声纳支持常见的.langs方法。

https://groups.google.com/forum/#!主题/sonarqube/aluTP63hfyA

也许另一种方法是使用Java项目中常用的其他实用程序类。我们目前支持commons lang StringUtils(v2和v3(中的方法、guava前提条件和java.util.Objects中的java 8方法(nonNull、isNull、requireOnNull(。正如我们所知道的这些方法的行为,我们能够正确地处理这样的调用并丢弃类似的FP。当然,我不想强迫你使用这样的库来让分析器满意。:(

将上面的代码更改为下面的代码确实解决了这个问题:

public class DetectorImport {
public String check1(Nonentity nonentity) {
String s;
if(nonentity == null) {
s = null;
}else {
s = nonentity.getName();
}
if(s !=null) {
s = s.replaceAll("(", "(");
}
return s;
}
}

以上问题摘自

https://community.sonarsource.com/t/commons-lang-stringutils-isnotblank-method-still-raise-npe/21517

我不是声纳中的OP,但我在那里提供了我的解决方案。我也有同样的问题,所以我把解决方案复制给其他来这里的人。

我们使用的是SonarScanner,而不是maven声纳插件进行扫描。对我们来说,问题是"sonar.java.libraries"变量设置不正确。我添加了目标"dependency:copy-dependencies"作为maven执行的一部分。这将所有依赖项复制到正确的位置,然后我设置属性“-Dsonar.java.libraries=target/dependency”,一切都开始按预期工作

相关内容

最新更新