我们希望将使用Maven runner的现有多模块Sonar项目转换为使用Ant runner。无论如何,这些项目都使用Ant进行主构建,使用Ant完成所有工作会方便得多。
我们必须保留项目的历史,这意味着我们需要保留用于项目及其模块的密钥。我做那件事有困难。
我们当前的Maven父pom看起来是这样的(ui类似,尽管语言是Flex):
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>anapp</artifactId>
<name>An Application</name>
<version>7.0</version>
<packaging>pom</packaging>
<modules>
<module>server</module>
<module>ui</module>
</modules>
<properties>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
</properties>
</project>
服务器模块pom看起来像这样:
<project ...>
<parent>
<groupId>com.example</groupId>
<artifactId>anapp</artifactId>
<version>7.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>anapp_server</artifactId>
<name>Server</name>
<version>7.0</version>
<build>
<outputDirectory>build/classes</outputDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
<testOutputDirectory>build/test/classes</testOutputDirectory>
<testSourceDirectory>src/test</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.core.codeCoveragePlugin>emma</sonar.core.codeCoveragePlugin>
<sonar.emma.reportPath>buildcodecoverage-results</sonar.emma.reportPath>
<sonar.surefire.reportsPath>buildtestresults</sonar.surefire.reportsPath>
</properties>
</project>
我们在命令行上将sonar.branch属性设置为"R7"。
"myapp"项目的密钥看起来像
com.example:anapp:R7
"myapp"项目中"服务器"模块的密钥如下:
com.example:anapp_server:R7
对于使用Ant任务的同一项目,我将属性设置为:
sonar.dynamicAnalysis=reuseReports
sonar.modules=server,ui
sonar.projectBaseDir=...
sonar.projectKey=com.example:myapp
sonar.projectName=An Application
sonar.projectVersion=7.0
server.sonar.binaries=...
server.sonar.dynamicAnalysis=reuseReports
server.sonar.emma.reportPath=...
server.sonar.java.coveragePlugin=emma
server.sonar.java.source=1.6
server.sonar.language=java
server.sonar.libraries=...
server.sonar.projectBaseDir=...
server.sonar.projectKey=com.example:anapp_server
server.sonar.projectName=Server
server.sonar.sources=...
server.sonar.surefire.reportsPath=...
server.sonar.tests=...
ui.sonar.dynamicAnalysis=false
ui.sonar.language=flex
ui.sonar.projectBaseDir=...
ui.sonar.projectKey=com.example:anapp_ui
ui.sonar.projectName=UI
ui.sonar.sources=...
项目的密钥看起来与pom文件相同("com.example:anap:R7");但是,服务器模块密钥看起来像
com.example:anapp:com.example:anapp_server:R7
如果我使用模块发布,这种差异将导致我们丢失模块的历史记录。
我有没有办法指定Ant属性来生成与现有Maven pom文件相同的密钥?
我们的声纳管理员告诉我,他可以为我们手动更改密钥,但这将是乏味和耗时的。如果必须的话,我们会采取这种方式,但我希望我只是错过了一些显而易见的东西,这会为我们节省很多工作。
在标准SonarQube样式键中无法转换Maven样式键。
因此,您的管理员是对的,唯一的方法是通过界面手动更新密钥,如文档中所述。