Maven的profile实现环境隔离+打包部署

举报
S-X-S 发表于 2025/01/09 11:07:54 2025/01/09
【摘要】 1.环境隔离 1.在resource目录下创建多个环境的配置文件 2.在application.yml中配置激活的环境 3.使用maven的环境变量实现动态配置环境 1.sun-dependencies的pom.xml中配置(可以继承到所有子模块) 1.配置环境变量<!-- maven的环境变量env-flag的值为具体的值 --><profiles> <profile> ...

1.环境隔离

1.在resource目录下创建多个环境的配置文件

CleanShot 2024-07-23 at 11.59.58@2x

2.在application.yml中配置激活的环境

CleanShot 2024-07-23 at 12.01.01@2x

CleanShot 2024-07-23 at 12.01.30@2x

3.使用maven的环境变量实现动态配置环境

1.sun-dependencies的pom.xml中配置(可以继承到所有子模块)
1.配置环境变量
<!-- maven的环境变量env-flag的值为具体的值 -->
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <env-flag>dev</env-flag>
        </properties>
        <!-- 默认为dev -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <env-flag>test</env-flag>
        </properties>
    </profile>
    <profile>
        <id>beta</id>
        <properties>
            <env-flag>beta</env-flag>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <env-flag>prod</env-flag>
        </properties>
    </profile>
</profiles>
2.build中配置filtering为true表示开启资源过滤
2.sun-demo的application.yml中动态读取环境变量

CleanShot 2024-07-23 at 12.17.00@2x

3.在maven中可以直接指定环境变量启动了

CleanShot 2024-07-23 at 12.17.27@2x

CleanShot 2024-07-23 at 12.17.50@2x

2.打包部署

1.父子模块配置(最全配置)

1.sun-dependencies配置打包的通用配置
    <!-- 打包通用配置 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <!-- maven插件版本号 -->
                <version>3.8.1</version>
                <configuration>
                    <!-- 配置编译使用的JDK版本 -->
                    <source>1.8</source>
                    <target>1.8</target>
                    <!-- 配置注解处理器的位置,这里以Lombok和MapStruct为例 -->
                    <annotationProcessorPaths>
                        <!-- Lombok 注解处理器 -->
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <!-- MapStruct 注解处理器 -->
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapstruct.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <!-- 配置资源文件,这里主要是指 src/main/resources 目录 -->
            <resource>
                <directory>src/main/resources</directory>
                <!-- 配置了这个,则 Maven 的环境变量就可以填充到 application-xxx.yml 中(用 $ 符号取),可用于环境隔离 -->
                <filtering>true</filtering>
            </resource>
            <!-- 可选:如果项目中有需要打包的 XML 文件,可以添加这部分配置 -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
2.在需要打包的子模块使用SpringBoot的打包插件
    <!-- maven 打包常规配置 -->
    <build>
        <!-- 打包成 jar 包时的名字为项目的artifactId -->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!-- 引用父模块中统一管理的插件版本(与SpringBoot的版本一致!) -->
                <version>${spring-boot.maven.plugin.version}</version>
                <configuration>
                    <!-- 指定项目的主启动类(大多数SpringBoot项目可以自动检测) -->
                    <mainClass>com.sunxiansheng.user.UserApplicaion</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <!-- 将所有的依赖包都打到这个模块中 -->
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2.最简化配置

<build>
    <!-- 设置生成的 JAR 文件的名称为项目的 artifactId -->
    <finalName>${project.artifactId}</finalName>

    <plugins>
        <!-- Maven 编译插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <!-- 配置编译使用的JDK版本 -->
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <!-- Spring Boot Maven 插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!-- 统一管理的插件版本(与SpringBoot的版本一致!) -->
            <version>${spring-boot.maven.plugin.version}</version>
            <executions>
                <execution>
                    <goals>
                        <!-- 将所有的依赖包都打到这个模块中 -->
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。