不能被索引两次 - testSourceDirectory和sourceDirectory是相同的

时间:2015-04-24 01:51:50

标签: maven jenkins sonarqube

我已经将性能测试创建为主模块的maven子模块。所有测试类都是在src / main / 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 -> 

如何解决此问题?

4 个答案:

答案 0 :(得分:11)

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

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

  

问:错误:引起:文件[...]无法编入索引两次。

     

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

     

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在Android项目上运行import discord from discord.ext import commands client = discord.Client() @client.event async def on_ready(): print('We have logged in as {0.user}'.format(client)) messageIDs = [759721500579463219] @client.event async def on_raw_reaction_add(payload): global messageIDs for messageID in messageIDs: if messageID == payload.message_id: user = payload.member role = "Test" await user.add_roles(discord.utils.get(user.guild.roles, name = role)) @client.command() async def addMessage(ctx, messageID): global messageIDs emoji = "?" channel = ctx.message.channel try: msg = await channel.fetch_message(messageID) except: await ctx.send("Invalid Message ID!") return await msg.add_reaction(emoji) messageIDs.append(messageID) bot.run("Not gonna reveal this") Gradle任务时,我看到此can't be indexed twice错误。该问题与sonarqube中存储的文件有关。

我尝试将app/src/debug/assetssonar.sources属性设置为使用脱节集,但无法解决该错误。

要纠正我更改的错误:

sonar.tests

收件人:

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

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