zoukankan      html  css  js  c++  java
  • maven 通过 profile 设置多环境打包

    maven 在设计之初就考虑到了业务代码和测试代码的分开存放。将业务代码默认存放在  src/main  下,将测试代码放在  src/test  下,然后在各自目录下再细分  java  与 resources 。

    但是我们日常开发过程中的业务代码也需要运行在不同的环境中,如开发环境、测试环境及线上环境,而不同环境之中程序的配置是不同的。每次打包完了手动替换显然不是我们想要的,所以我们希望能找一个方法,能在代码打包的时候能自动根据环境来打包不同的配置文件。

    还好,  maven-resources-plugin  支持自定义配置文件的路径,找到一个解决问题的入口。

    首先,我们在工程里面建立多个文件夹,如图:

    而在 pom.xml 里面这样配置:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5     <modelVersion>4.0.0</modelVersion>
     6 
     7     <groupId>org.kischn</groupId>
     8     <artifactId>multi-profile</artifactId>
     9     <version>1.0-SNAPSHOT</version>
    10 
    11 
    12     <profiles>
    13         <!-- 当我们需要把代码打包发布到生产环境时,执行 mvn clean package -D skipTests -P production -->
    14         <profile>
    15             <id>production</id>
    16             <build>
    17                 <resources>
    18                     <resource>
    19                         <directory>src/main/prod-resources</directory>
    20                     </resource>
    21                     <resource>
    22                         <directory>src/main/resources</directory>
    23                     </resource>
    24                 </resources>
    25             </build>
    26         </profile>
    27     </profiles>
    28 </project>
    pom.xml

    maven-resources-plugin 支持自定义多个 resource 目录,嘻嘻,不错~

    啥?没看到 maven-resources-plugin 相关的名字?因为 maven 默认就带这个插件呀,只填上这个相关的配置就可以了。

    经过我的测试, maven-resources-plugin 的配置文件复制的策略就是 按照配置的顺序进行文件拷贝,如果冲突呢?冲突就是不覆盖

    所以, xml 里面配置的意思就是先把 prod-resources 里面的文件复制到 target 目录下,然后再复制 resources 里面的,如果冲突了, resources 里面的文件就不复制了。

    测试一下效果:

    好,大功告成!

    总结一下其中的关键点:

    0. maven-resources-plugin 支持自定义多个 resources 目录,且目录是按照声明顺序进行文件复制,如果文件遇到冲突,靠前的优先存在。

    1. 也就是说你可以理解为 prod-resources 继承 resources,如果 prod-resources 里面有与 resources 同名文件,说明就是 override 了,否则就直接继承 resources 里面的文件了。

    上面提到的 multi-profile 代码灰常简单,点击这里下载 multi-profile.zip

  • 相关阅读:
    地理大发现
    克里斯托弗·哥伦布
    2016. last day in office
    泰斯花粉阻隔剂 怎么使用
    ZT 螨虫知识2
    ZT 螨虫的话就不要跟狗多接触,狗的寄生虫很多,还有草地,
    expense KK [ɪkˋspɛns] DJ [iksˋpens]
    Windows 实战项目 001 文件扫描器 (01)
    017 系统内存信息 内存大小 空闲内存 5
    017 虚拟内存页面区块 4
  • 原文地址:https://www.cnblogs.com/kischn/p/7287381.html
Copyright © 2011-2022 走看看