从Maven pom.xml更新sonar-project.properties文件中的特定属性?

问题描述 投票:1回答:2

我有一个Spring Boot应用程序,它使用Maven作为构建和依赖管理工具。 Maven版本是3.5.0。

SonarQube用于进行静态代码分析。开发人员在他们的机器上使用SonarQube scanner在提交给Git之前扫描项目。 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中做到这一点。

谢谢

maven spring-boot sonarqube
2个回答
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
投票

我终于能够使用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可以完成这项常见任务,但效果非常好。

如果有本地方式,请发布您的答案,我会马上接受。

© www.soinside.com 2019 - 2024. All rights reserved.