由于更新的maven汇编程序插件,Sonar Maven插件失败了,如何才能让新插件正确传递属性?

时间:2016-09-12 19:34:50

标签: maven sonarqube maven-assembly-plugin sonarqube-scan sonar-maven-plugin

必须从1.1.6更新我们的maven汇编程序版本到1.1.8。它是唯一发生的变化,现在Sonar Maven Plugin抛出了这个例外:

[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.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>

根据声纳的代码,它通常通过地图获取属性。当其中一个字符串是数组列表时,它会抛出此异常。反正有没有配置我的属性,以便新的maven汇编程序将正确传递这些值?

2 个答案:

答案 0 :(得分:1)

我们在3.1.1版中实现了一种解决方法,以避免注入非字符串属性的buggy插件: 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>

答案 1 :(得分:0)

我终于找到了解决此问题的方法。我决定不去运行Java 7,然后是8来构建覆盖率报告(检查以前的答案和评论)。我确信这样可行,但由于我们的dev或CI机器都没有设置Java 8环境,我尝试了不同的路径。

我最初通过模块mvn clean install(作为最后构建的模块)在CoverageModule的末尾构建了声纳报告。 1.1.8 java汇编程序版本在构建项目时投入了适合,然后运行分析。

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