Skip to content

属性

Maven 中,定义属性(properties)是一个常见的做法,用来统一管理版本号、目录路径或者其他可复用的值,避免硬编码。属性是在 pom.xml<properties> 标签中定义的。

定义属性

  • Maven自动定义的属性,不建议随意更改:
xml
<project>
    ...
  <properties>
      <maven.compiler.source>8</maven.compiler.source>
      <maven.compiler.target>8</maven.compiler.target>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>
  • 我们也可以在properties中自定义属性:
xml
<project>
    ...
    <properties>
        <java.version>17</java.version>
        <spring.boot.version>3.2.0</spring.boot.version>
        <my.custom.property>HelloWorld</my.custom.property>
    </properties>
</project>

使用属性

xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${spring.boot.version}</version>
</dependency>

内置属性

Maven 自带一些内置属性,我们可以直接使用:

属性描述
${project.version}当前项目版本
${project.groupId}当前项目 GroupId
${project.artifactId}当前项目 ArtifactId
${project.basedir}表示 当前项目的根目录

他的值来自于我们在pom.xml中的配置:

xml
<project>
...
    <groupId>org.example</groupId>
    <artifactId>maven-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
....

</project>

可以省略 project.,但不建议这样做。为了构建的稳定性和配置的清晰度,坚持使用 ${project.version} 是开发中更稳妥的做法。

xml
<dependency>
    <groupId>org.example</groupId>
    <artifactId>controller</artifactId>
    <version>${version}</version>
</dependency>

注意事项

Maven 属性如果出现同名冲突,最终的解析规则是:按优先级覆盖,而不是报错。子层级属性会覆盖父层级属性

xml
<properties>
    <app.version>1.0</app.version>
    <app.version>2.0</app.version>
</properties>

最终 app.version = 2.0,Maven 不会报错或警告,前面的 1.0 会被直接覆盖。