Sonar Maven 插件由于较新的 Maven 汇编程序插件而失败,我怎样才能让新插件正确传递属性?

Sonar Maven plugin is failing because of a newer maven assembler plugin, how can I get the new plugin to pass properties correctly?

必须将我们的 Maven 汇编器版本从 1.1.6 更新到 1.1.8。这是发生的唯一变化,现在 Sonar Maven 插件抛出此异常:

[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.2:sonar 
    (default) on project ReconCoverage: java.util.ArrayList cannot be cast to java.lang.String ->

插件:

<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.7</version>

<groupId>com.CORPNAME.raptor.build</groupId>
<artifactId>assembler-maven-plugin</artifactId>
<version>1.1.8</version>

我已经研究了大约一个星期,需要升级到这个汇编版本。没有其他团队在升级过程中遇到此问题,因为他们通过 jenkins 使用 Sonar。我正在使用 maven 插件,因为我们的项目有很多模块,它会构建覆盖率结果以匹配它。

我查看了 sonar 的代码,它似乎正在 sonar.batch.bootstrap.userproperties 中发生。我猜这是在传入声纳属性时发生的,例如:sonar.language、sonar.java.coveragePlugin、sonar.host.url 等项目。

覆盖属性示例:

<sonar.language>java</sonar.language>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.host.url>http://corp.sonar.url/</sonar.host.url>
<sonar.jdbc.url>jdbc:oracle:thin:@sonardb.corp.com:0000:sonardb</sonar.jdbc.url>
<sonar.jdbc.username>username</sonar.jdbc.username>
<sonar.jdbc.password>password</sonar.jdbc.password>
<sonar.jdbc.driver>oracle.jdbc.driver.OracelDriver</sonar.jdbc.driver>

根据sonar的代码,一般都是通过Map来获取属性。当其中一个字符串是数组列表时,它会抛出此异常。无论如何配置我的属性,以便新的 maven 汇编器将正确传递这些值?

我们在版本 3.1.1 中实施了一个解决方法来规避注入非字符串属性的错误插件: https://jira.sonarsource.com/browse/MSONAR-145

要使用它,只需更新您 pom.xml 即可使用:

<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.1.1</version>

我终于找到了解决这个问题的方法。我决定不走 运行ning Java 7 然后 8 的路线来构建覆盖率报告(检查以前的答案和评论)。我敢肯定这行得通,但是由于 none 我们的开发人员或 CI 机器设置了 Java 8 个环境,我尝试了不同的路线。

我最初是在 mvn clean install 末尾通过模块 CoverageModule(这是要构建的最后一个模块)构建声纳报告。 1.1.8java汇编版本在建工程的时候卡住了,然后运行分析

我保留了该模块,以便在正常构建期间,它仍会 运行 我的 ant task plugin 合并我们模块的所有 Jacoco 报告。我从该模块的 pom 中删除了 sonar-maven-plugin 并将其放入项目的聚合器模块(所有模块的父级)。在 运行 一个完整的 mvn clean install 之后,我可以 运行 一个 mvn sonar:sonar 并且似乎与新的汇编程序版本和我使用的旧声纳版本没有冲突。