【问题标题】:can't be indexed twice - testSourceDirectory and sourceDirectory are same不能被索引两次 - testSourceDirectory 和 sourceDirectory 是相同的
【发布时间】:2015-07-02 11:03:10
【问题描述】:

我已将性能测试创建为我的主模块的 maven 子模块。所有的测试类都写在 src/ma​​in/java 而不是 src/test/java

我能够将项目打包为 jar 并运行它以对我的项目进行性能测试。

我想执行mvn test。要让mvn test 工作,我应该设置<testSourceDirectory> 值。在这种情况下,我在 src/main/java 中有我的代码,我将其设置为:

<testSourceDirectory>src/main/java</testSourceDirectory>

现在mvn test 有效。

但问题是声纳构建失败并出现错误抱怨:can't be indexed twice。很明显,我的 pom testSourceDirectorysourceDirectory 是一样的。

[ERROR] Failed to execute goal 
org.codehaus.mojo:sonar-maven-plugin:2.5:sonar (default-cli) 
   on project Blah: File [relative=XYZ.java, abs=/Path/XYZ.java] can't be indexed twice. 
Please check that inclusion/exclusion patterns produce 
disjoint sets for main and test files -> 

如何解决这个问题?

【问题讨论】:

  • 有些日志可能是? “文件已编入索引”是相当稀缺的信息。
  • 用确切的错误更新了问题。

标签: maven jenkins sonarqube


【解决方案1】:

我也遇到了同样的问题。最后,借助以下文档解决了这个问题:-

https://github.com/SonarOpenCommunity/sonar-cxx/wiki/FAQ

问:错误:原因:文件 [...] 无法被索引两次。

A:如果出现以下错误,您必须验证您的排除/包含 特性。请检查包含/排除模式是否产生 源文件和测试文件的不相交集

错误:原因:文件 [...] 不能被索引两次。请检查 包含/排除模式为主要和测试产生不相交的集合 文件示例如下所示:

sonar.sources=.
sonar.tests=.
sonar.test.inclusions=**/*Test*/**
sonar.exclusions=**/*Test*/**

【讨论】:

    【解决方案2】:

    这不是标准的 Maven 用法,但您可以使用排除项轻松修复 SonarQube 分析。 sonar.exclusions=src/main/java/** 要么 sonar.test.exclusions=src/main/java/**

    取决于您是否希望将源文件视为测试文件或主文件。

    但正确的 Maven 方法是将您的测试放在 src/test/java 中并 ackage 您的测试: https://maven.apache.org/guides/mini/guide-attached-tests.html

    【讨论】:

    • sonar.exclusions=src/main/java/**sonar.test.exclusions=src/main/java/** 放入sonar.properties 并重新启动声纳服务器?仍然对我不起作用,看到同样的异常
    • 原来我在 pom.xml 中有&lt;sourceDirectory&gt;src&lt;/sourceDirectory&gt;,这就是问题所在
    • @AnandRockzz 你救了我的命。我在 build.gradle 文件中也有相同的配置。 :)
    【解决方案3】:

    如果项目不遵循默认的 Maven 目录结构,那么在项目的 pom 中,您可以明确指定源代码部分和测试部分的位置:

    <properties>
        <sonar.sources>src/main/foo</sonar.sources>
        <sonar.tests>src/test/bar</sonar.tests>
    </properties>
    

    【讨论】:

      【解决方案4】:

      在 Android 项目上运行 sonarqube Gradle 任务时,我看到了这个 can't be indexed twice 错误。与存储在app/src/debug/assets 中的文件有关的问题。

      我尝试将 sonar.sourcessonar.tests 属性设置为使用脱节集,但我无法解决错误。

      修复我更改的错误:

      property "sonar.coverage.exclusions", "**/assets/**, ..."
      

      到:

      property "sonar.exclusions", "**/assets/**, ..."
      

      为了完全忽略 /assets/ 目录。

      【讨论】:

        猜你喜欢
        • 2019-03-09
        • 2021-03-18
        • 2022-01-22
        • 1970-01-01
        • 2018-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-27
        相关资源
        最近更新 更多