必须从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汇编程序将正确传递这些值?
答案 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
并且似乎与新的汇编程序版本以及我正在使用的旧声纳版本没有冲突。