是否从Maven pom.xml更新sonar-project.properties文件中的特定属性?
我有一个Spring引导应用程序,它使用Maven作为构建和依赖关系管理工具。Maven版本是3.5.0 SonarQube被用来进行静态代码分析。在提交到Git之前,开发人员使用机器上的来扫描项目。詹金斯还使用詹金斯的声纳扫描仪进行自动分析。SonarQube扫描仪需要一个名为是否从Maven pom.xml更新sonar-project.properties文件中的特定属性?,maven,spring-boot,sonarqube,Maven,Spring Boot,Sonarqube,我有一个Spring引导应用程序,它使用Maven作为构建和依赖关系管理工具。Maven版本是3.5.0 SonarQube被用来进行静态代码分析。在提交到Git之前,开发人员使用机器上的来扫描项目。詹金斯还使用詹金斯的声纳扫描仪进行自动分析。SonarQube扫描仪需要一个名为sonar project.properties的文件,该文件位于项目的根目录下。上面提到的两个用例使用相同的sonar项目.properties文件 也就是说,我希望在构建过程中使用Maven填充sonar proje
sonar project.properties
的文件,该文件位于项目的根目录下。上面提到的两个用例使用相同的sonar项目.properties
文件
也就是说,我希望在构建过程中使用Maven填充sonar project.properties中的一些属性,因此我们不必一直在两个地方更改它们
例如:
(利用pom.xml中的本机版本属性)sonar.projectVersion
(利用pom.xml中的属性)sonar.java.source
(利用pom.xml中的属性)sonar.java.target
谢谢是的,Maven具有在构建期间用属性替换占位符的功能。这叫做过滤。根据您的用例,您可能需要将以下内容添加到pom.xml中
<resources>
<resource>
<directory>${project.basedir}</directory>
<includes>
<!-- To replace placeholders in sonar-project.properties -->
<include>sonar-project.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<!-- To process default resources located in src/main/resources folder of your project-->
<directory>${project.basedir}/src/main/resources</directory>
<includes>
<include>*.*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
之后,sonar-project.properties将包含这些行
sonar.projectVersion=${project.version}
sonar.java.source=${java.source.version}
sonar.java.target=${java.target.version}
我终于能够使用
maven-antrun插件
满足需求
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>sonar-properties-replacement</id>
<phase>compile</phase>
<configuration>
<target>
<propertyfile file="${basedir}/sonar-project.properties">
<entry key="sonar.projectName" value="${project.name}" />
<entry key="sonar.projectKey" value="${sonar.projectKey}" />
<entry key="sonar.projectVersion" value="${project.version}" />
<entry key="sonar.java.source" value="${java.version}" />
<entry key="sonar.java.target" value="${java.version}" />
</propertyfile>
<replaceregexp file="${basedir}/sonar-project.properties" match="^#.*\n" replace=""/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
maven antrun插件
声纳性能更换
编译
跑
标记实际上是在pom.xml(java.version和sonar.projectKey)开头定义的属性,以及项目名称和版本的Maven本机属性
这不是我首选的解决方案,因为我本来希望有一个原生的Maven来完成这个常见的任务,但它工作得非常好
如果有本机方法,请发布您的答案,我会立即接受。是否应该用pom.xml(例如1.0.0.RELEASE)中的值替换${project.version}的值?我使用的是通用声纳扫描仪,它与Maven没有紧密耦合。我想要的是一种在sonar-project.properties中为特定属性设置值的方法,而不仅仅是在sonar-project.properties和pom.xml之间有一个符号链接。是否可行?是的,它将从pom.xml中获取所有属性的值,包括版本(1.0.0.RELEASE)。我原以为你是作为Maven buildI的一部分来运行声纳扫描仪的,但我改变了主意,决定使用通用声纳扫描仪。在我这方面,当我执行
mvn clean compile
时,值并没有得到预期的更新。例如,我看到:sonar.projectName=${project.name}
,sonar.projectVersion=${project.version}
,sonar.java.source=${java.version}
和sonar.java.target=${java.version}
。我错过什么了吗?可能有一些执行?包含替换的文件位于包含编译类(如target/classes)的文件夹中。Maven不在源文件本身中进行替换。Maven有很多插件。但我们的想法是,您使用Maven处理所有事情:第一步编译java代码并替换占位符,第二步执行单元测试,第三步启动sonar scanner(或使用sonar的Maven插件),第四步将代码打包到jar/war/zip,第五步将工件部署到二进制存储库。
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>sonar-properties-replacement</id>
<phase>compile</phase>
<configuration>
<target>
<propertyfile file="${basedir}/sonar-project.properties">
<entry key="sonar.projectName" value="${project.name}" />
<entry key="sonar.projectKey" value="${sonar.projectKey}" />
<entry key="sonar.projectVersion" value="${project.version}" />
<entry key="sonar.java.source" value="${java.version}" />
<entry key="sonar.java.target" value="${java.version}" />
</propertyfile>
<replaceregexp file="${basedir}/sonar-project.properties" match="^#.*\n" replace=""/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>