我有一个Spring Boot应用程序,它使用Maven作为构建和依赖管理工具。 Maven版本是3.5.0。
SonarQube正用于进行静态代码分析。在提交给Git之前,开发人员使用他们机器上的SonarQube scanner来扫描项目。 Jenkins还使用Sonars Scanner for Jenkins进行自动分析。 SonarQube扫描程序需要一个名为sonar-project.properties
的文件位于项目的根目录下。上面提到的两个用例都使用相同的sonar-project.properties
文件。
话虽如此,我希望在构建过程中由Maven填充sonar-project.properties
中的一些属性,因此我们不必一直在两个地方更改它们。
一些例子是:
sonar.projectVersion
(利用pom.xml中的本机版本属性)sonar.java.source
(利用我在pom.xml中拥有的属性)sonar.java.target
(利用我在pom.xml中拥有的属性)可行吗?我刚开始使用Maven(来自Ant),我很容易在Ant中做到这一点。
谢谢
答案 0 :(得分:2)
是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>
Maven为项目版本预定义了属性,其占位符为${project.version}
对于java版本,您需要向pom.xml添加自定义属性,如此
<properties>
<java.source.version>1.7</java.source.version>
<java.target.version>1.7</java.target.version>
</properties>
之后你的sonar-project.properties将包含这些行
sonar.projectVersion=${project.version}
sonar.java.source=${java.source.version}
sonar.java.target=${java.target.version}
答案 1 :(得分:1)
我终于能够使用maven-antrun-plugin
来满足要求。
<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>
令牌实际上是在pom.xml(java.version和sonar.projectKey)开头定义的属性,以及项目名称和版本的Maven本机属性。
这不是我首选的解决方案,因为我原本希望Maven能够完成这项常规任务,但效果非常好。
如果有本地方式,请发布您的回答,我会马上接受。