【问题标题】:Ugly legacy date format java code cause an error in SonarQube 5.3丑陋的旧日期格式 java 代码导致 SonarQube 5.3 中的错误
【发布时间】:2016-01-16 08:27:44
【问题描述】:

我是 SonarQube 的新手。以下代码在 SonarQube 5.2 中正确运行(违反规则“Printf 样式的格式字符串不应导致运行时出现意外行为”),但在 SonarQube 5.3 中导致错误:

[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7.1:sonar
  (default-cli) on project art: SonarQube is unable to analyze file:
  'D:\workspace\art\src\main\java\grp\art\Iso8601Util.java': index (1)
  must be less than size (1) -> [Help 1]
  ...
Caused by: java.lang.IndexOutOfBoundsException: index (1) must be less than size (1)
  at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:301)
  at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:280)
  at com.google.common.collect.RegularImmutableList.get(RegularImmutableList.java:91)
  at org.sonar.java.checks.PrintfCheck.verifyParameters(PrintfCheck.java:173)
  at org.sonar.java.checks.PrintfCheck.onMethodInvocationFound(PrintfCheck.java:112)
  at org.sonar.java.checks.methods.AbstractMethodDetection.checkInvocation(AbstractMethodDetection.java:52)
  at org.sonar.java.checks.methods.AbstractMethodDetection.visitNode(AbstractMethodDetection.java:43)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:89)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.scanTree(SubscriptionVisitor.java:72)
  at org.sonar.java.ast.visitors.SubscriptionVisitor.scanFile(SubscriptionVisitor.java:65)
  at org.sonar.java.checks.SubscriptionBaseVisitor.scanFile(SubscriptionBaseVisitor.java:33)
  at org.sonar.java.model.InternalVisitorsBridge.visitFile(InternalVisitorsBridge.java:111)
  at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:97)
  ... 54 more

我只是使用开箱即用的 SonarQube Java 插件,maven 3.2.1 到 Eclipse/m2e 和 org.codehaus.mojo:sonar-maven-plugin:2.7.1 (mvn sonar:sonar --errors -Dsonar.host.url=http://myserver:9000/)

我将使用 SimpleDateFormat 而不是 String.format,但我只是报告了 SonarQube 5.3 中可能出现的意外行为。

import java.util.Date;

public class Iso8601Util {

  /**
   * @return Date formatté en 1970-01-01T00:00:00Z
   */
   public static String now() {
      return format(new Date());
   }

   /**
    * @return Date formatté en 1970-01-01T00:00:00Z
    */
    public static String format(Date date) {
       return String.format("%tFT%<tTZ", date);
    }

   /**
    * @return Date formatté en 1970-01-01 00:00:00
    */
    public static String formatWithoutTZ(Date date) {
      return String.format("%tF %<tT", date);
    }

   /**
    * @return Date formatté en 1970-01-01T00:00:00Z mais utilisable
    * pour un chemin de fichier (ou de répertoire) pour Windows.
    */
    public static String nowWindowsFileCompatible() {
      return now().replace(":", "");
    }
}

【问题讨论】:

    标签: java sonarqube


    【解决方案1】:

    如果您使用的是 SonarQube 5.3,我假设您使用的是默认捆绑的 Java 插件,即版本 3.7.1。

    因此,您遇到了这个问题https://jira.sonarsource.com/browse/SONARJAVA-1369,该问题已在 java 插件 3.8 中解决

    所以请升级到最新的 sonar-java 插件。

    【讨论】:

    • 非常感谢。升级到 sonar-java-plugin 3.9 时,SonarQube 5.3 的错误消失了,不再像 SonarQube 5.2 那样违反规则。
    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多