Skip to content

Spring & Maven & Profiles

🏷️ Maven

主要是根据这篇博客上的方案进行配置,上面写的很详细,具体用法请看原文。

记一下遇到的问题,主要是由于 profiles.profile.properties 中定义的变量名不同,导致打包时一直没有配置文件。在 <resources> 使用变量(如 /${profileActive})时要和在 profiles.profile.properties 中定义的一致。

下面是我在项目中使用的方法,以供参考:

pom.xml

xml
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <profileActive>test</profileActive>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
    </profile>
</profiles>

<build>
    <finalName>${project.artifactId}</finalName>

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>

    <resources>
        <resource>
            <directory>src/main/resources/</directory>
            <excludes>
                <exclude>dev/*</exclude>
                <exclude>prod/*</exclude>
                <exclude>test/*</exclude>
            </excludes>
            <includes>
                <include>banner.txt</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources/${profileActive}</directory>
        </resource>
    </resources>
</build>

目录接口

application.yml

yaml
spring:
  profiles:
    active: dev

打包后的文件

打包时使用 -P 指定使用的 profile 。下面的命令是使用 prod 环境的 profile

shell
mvn clean package -P prod

在打包的 jar 文件的 \BOOT-INF\classes\ 目录下可以看到加载进来的配置文件。

可以看到打包后仅保留了 prod 目录下的配置文件。

参考

关于 Spring BootMavenprofile,这两篇文件介绍的很详细。

  1. maven(三)最详细的 profile 的使用
  2. profile 之 springboot