簡體   English   中英

Commons-lang StringUtils isNotBlank 方法仍然引發 NPE

[英]Commons-lang StringUtils isNotBlank method still raise 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

Community EditionVersion 7.6 (build 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;
    }
}

從這個聲納谷歌組中,提到聲納支持 common.langs 方法。

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

也許另一種方法可以讓您使用其他實用程序類,這些實用程序類通常在 Java 項目中使用。 我們目前支持來自 commons-lang StringUtils(v2 和 v3)的方法、guava 前提條件和來自 java.util.Objects(nonNull、isNull、requireNonNull)的 java 8 方法。 由於我們知道這些方法的行為方式,因此我們能夠正確處理此類調用並丟棄類似的 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

我不是 Sonar 中的 OP,但我在那里提供了我的解決方案。 我有完全相同的問題,所以我將解決方案復制給其他人。

我們使用 SonarScanner 而不是 maven 聲納插件進行掃描。 對我們來說,問題是“sonar.java.libraries”變量沒有正確設置。 我添加了目標“ dependency:copy-dependencies ”作為 maven 執行的一部分。 這將所有依賴項復制到正確的位置,然后我設置了屬性“-Dsonar.java.libraries=target/dependency” ,一切都開始按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM