maven的pom.xml中profiles的作用详解

作者:°Fuhb 时间:2022-07-03 20:40:54 

1、profiles是什么?有什么作用

在maven构建的项目都存在一个pom.xml的项目对象模型配置文件,用于约束项目(如:jar包管理、构建管理等)。profiles是pom.xml中的一个配置项。

我们在开发项目时一般都会区分线上环境和测试环境,这两个环境需要切换以适应不同的环境需求

maven的pom.xml中profiles的作用详解

正式环境的配置,一般放置于src/main/resources下,而测试环境放置于/src/test/resources下面。

profile的主要作用就是区分正式环境和测试环境的配置

2、如何配置


<profiles>
   <profile>
       <id>release</id>
       <build>
           <resources>
               <resource>
                   <directory>src/main/resources</directory>
                   <includes>
                       <include>**/*</include>
                   </includes>
               </resource>
           </resources>
       </build>
   </profile>

<profile>
       <id>test</id>
       <build>
           <resources>
               <resource>
                   <directory>src/test/resources</directory>
                   <includes>
                       <include>config/*.properties</include>
                       <include>log4j.xml</include>
                   </includes>
               </resource>
               <resource>
                   <directory>src/main/resources</directory>
                   <includes>
                       <include>**/*.xml</include>
                   </includes>
                   <excludes>
                       <exclude>log4j.xml</exclude>
                   </excludes>
               </resource>
           </resources>
       </build>
<activation>
               <activeByDefault>true</activeByDefault>
          </activation>
   </profile>
</profiles>

如上, 我配置了两个profile一个release用于正式环境发布,test用于测试环境使用;默认开启测试环境,activation->true

测试环境与正式环境只是部分的配置不同,我们需要公用这部分配置。这就使用到了includes and excludes,用引入和排除配置文件

3、区别构建发布包

构建测试包:


maven package -P test -Dmaven.test.skip=true

构建正式包:


maven package -P release -Dmaven.test.skip=true

maven多环境profiles参数切换

在实际开发项目中,常常有几种环境,一般情况下最少有三种环境:开发、测试、正式,各个环境之间的参数也各不相同,

于是在环境切换时我们需要修改为各环境需要的参数,就此我们可以通过maven的配置在切换环境是简化这一步骤.

项目结构图

maven的pom.xml中profiles的作用详解

src/main/resources/dev 目录是开发环境的配置项目

src/main/resources/test 目录是测试环境的配置项目

在pom.xml定义环境的profile


<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<project.active>dev</project.active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<project.active>test</project.active>
</properties>
</profile>
</profiles>

activeByDefault标签的值为true的话表示为默认的profile,使用mvn install命令起作用的就是默认的 profiles.activation为我们配置激活的profile


<build>
<finalName>SpringMVC_Spring_Mybatis</finalName>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>message.properties</include>
<include>${project.active}/**</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<excludes>
<exclude>db.properties</exclude>
<exclude>user.properties</exclude>
<exclude>message.properties</exclude>
<exclude>**/**</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
<path>/</path>
<port>8088</port>
</configuration>
</plugin>
</plugins>
</build>

在工程的${basedir}/src/main/resource,目录下(basedir指的是pom文件所在的目录)

<include>与<exclude>是用来圈定和排除某一文件目录下的文件是否是工程资源的,<include>中指定的为资源文件,其它的都不是,<exclude>中指定的除了这些都为资源文件,如果<include>与<exclude>划定的范围存在冲突时,以<exclude>划定的范围为准,当<include>与<exclude>指定了相同的文件时,它们是不会被排除的,如message.properties同时被<include>与<exclude>指定,但它们还是会被编译.

输入maven指令


mvn clean install -P test

编译结果如下图,只编译test环境需要的配置-P后面的test为我们所要激活的profile

maven的pom.xml中profiles的作用详解

来源:https://blog.csdn.net/qq_28834355/article/details/108774293

标签:maven,pom.xml,profiles
0
投稿

猜你喜欢

  • Java基础-Java的体系结构

    2022-05-18 00:19:05
  • IntelliJ IDEA运行SpringBoot项目的详细步骤

    2022-04-29 00:59:08
  • JPype实现在python中调用JAVA的实例

    2022-08-24 03:19:52
  • 详解Kotlin中的面向对象(一)

    2023-08-17 12:57:38
  • C#获取图片文件扩展名的方法

    2022-03-06 04:27:43
  • C#异步调用实例小结

    2023-07-16 10:31:03
  • Java Web实现添加定时任务的方法示例

    2023-11-25 02:12:15
  • idea手动刷新git分支的详细教程

    2022-04-05 11:53:43
  • Eclipse查看开发包jar里源代码的方法

    2023-08-01 14:47:57
  • Android Studio项目中导入开源库的方法

    2022-02-02 02:40:27
  • IntelliJ IDEA中显示和关闭工具栏与目录栏的方法

    2023-09-01 23:18:59
  • Java基础之堆内存溢出的解决

    2023-11-10 20:06:30
  • Android自定义SwipeRefreshLayout高仿微信朋友圈下拉刷新

    2023-01-06 08:51:34
  • C#使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化

    2023-01-16 02:11:54
  • Android中判断网络是否连接实例详解

    2023-10-19 11:45:39
  • 超简单C#获取带汉字的字符串真实长度(单个英文长度为1,单个中文长度为2)

    2021-11-13 20:37:55
  • springboot整合企微webhook机器人发送消息提醒

    2023-10-10 01:29:08
  • RecyclerView实现拖拽排序效果

    2022-09-14 01:23:40
  • C#中的事务用法实例分析

    2022-04-03 05:23:37
  • c# 递归访问文件夹(删掉歌词文件)

    2022-02-11 02:52:16
  • asp之家 软件编程 m.aspxhome.com