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
并且似乎与新的汇编程序版本和我使用的旧声纳版本没有冲突。
必须将我们的 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
并且似乎与新的汇编程序版本和我使用的旧声纳版本没有冲突。