• Maven部署打包多环境(开发、测试、生产)配置教程


    1、多环境配置的必要性

    1.1 没有进行多环境配置进行的操作复杂性

    1. 配置重复:在每个环境(开发、测试、生产)中,可能需要使用相同的插件、依赖和配置项。这样会导致在每个环境中进行重复的配置。
    2. 环境特定配置:某些配置项可能仅适用于特定环境(例如,数据库连接信息、文件路径等)。如果不进行多环境配置,这些特定于环境的配置项可能会被错误地应用到其他环境。
    3. 构建过程复杂化:由于没有将不同环境的配置分离,开发人员可能需要在每个环境中手动执行一系列配置和构建操作。这样会导致构建过程变得复杂且容易出错。
    4. 维护困难:当项目需要调整配置以适应新环境时,需要在每个环境配置文件中进行相应的修改。这将导致配置文件的维护变得困难且容易出错。

    1.2 不影响运行时配置

    执行多环境自动化配置后,不会影响我们再IDEA上直接执行RUN操作,此时,主文件的配置会被下图配置替换。
    在这里插入图片描述

    2、配置方案

    2.1 添加profile属性

    请注意下属性片段中的注释。

    >
            >
                <!--不同环境Profile的唯一id-->
                dev
                
                    true
                
                
                    
                    dev
                
            >
            >
                >prod>
                >
                    >false>
                >
                >
                    >prod>
                >
            >
            >
                >test>
                >
                    >false>
                >
                >
                    >test>
                >
            >
        >
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    完成该属性的增加后,Profiles菜单下就出现三个自定义的环境,如下图所示默认激活的是dev环境。

    在这里插入图片描述

    2.1 添加两个插件

    1. maven-resources-plugin
      用于将资源配置文件中的动态变量进行替换。

    2. maven-antrun-plugin
      用于追加自定义日志消息,在打包时候,在程序执行完毕后控制台打印这是构建哪个环境的日志,使得打包的环境一目了然,避免出现打包错误,导致打包时使用了一个环境的配置,部署时环境搞错了。
      其中 就引用了environment属性。

        <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>default-resources</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>target/classes</outputDirectory>
                                <useDefaultDelimiters>false</useDefaultDelimiters>
                                <delimiters>
                                    <delimiter>@</delimiter>
                                </delimiters>
                                <resources>
                                    <resource>
                                        <directory>src/main/java</directory>
                                        <includes>
                                            <include>**/*.xml</include>
                                        </includes>
                                        <filtering>true</filtering>
                                    </resource>
                                    <resource>
                                        <directory>src/main/resources/</directory>
                                        <filtering>true</filtering>
                                        <includes>
                                            <include>**/*.yml</include>
                                        </includes>
                                    </resource>
                                    <resource>
                                        <directory>src/main/resources/</directory>
                                        <excludes>
                                            <exclude>**/*.yml</exclude>
                                        </excludes>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.3</version>
                    <executions>
                        <execution>
                            <id>print-custom-info</id>
                            <phase>package</phase>
                            <configuration>
                                <tasks>
                                    <echo message="[INFO] ${environment} 环境打包执行成功"/>
                                </tasks>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
            </plugins>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    2.3 主配置文件中添加插值变量

    在这里插入图片描述
    请注意:主配置文件中引用的环境变量使用两个@,有的是${},这个可以在2.1中的插件进行配置。

    >
      >@>
    >
    
    • 1
    • 2
    • 3

    3、效果展示

    3.1 勾选prod环境

    在这里插入图片描述

    3.2 控制台输出结果

    在这里插入图片描述

  • 相关阅读:
    std::minus
    图像识别与处理学习笔记(一) 入门直方图基础概念与图像增强
    LLaMA模型指令微调 字节跳动多模态视频大模型 Valley 论文详解
    使用Chrome浏览器进行网页截图
    【纯虚函数】设计一个形状类——矩形、圆形、三角形,分别计算三种当前图形的周长和面积
    docker-compose 微服务编排部署
    国密GmSSL v2版本命令行方式生成国密sm2私钥、公钥、签名和验证签名
    zlib库的交叉编译记录
    Java基础-方法-可变参数
    vue2axios的使用
  • 原文地址:https://blog.csdn.net/qq_40657528/article/details/132781052