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

目录
  • 1、profiles是什么?有什么作用
  • 2、如何配置
  • 3、区别构建发布包
  • maven多环境profiles参数切换
    • 项目结构图

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

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

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

正式环境的配置,一般放置于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的配置在切换环境是简化这一步骤.

项目结构图

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Maven profile配置管理及激活profile的几种方式

    为了实现不同环境构建的不同需求,这里使用到了 profile.因为 profile 能够在构建时修改 pom 的一个子集,或者添加额外的配置元素.接下来介绍 Maven 中对 profile 的配置和激活. 针对不同环境的 profile 的配置 为了体现不同环境的不同构建,需要配置好不同环境的 profile,代码如下: <profiles> <profile> <id>dev_evn</id> <properties> <db.driv

  • 使用maven profile指定配置文件打包适用多环境的方法

    开发过程, 我们习惯把数据源配置, 项目常量, 日志配置等基础数据配置写到一个个单独的的文件中. 如jdbc.properties等各种.格式的文件. 如何不频繁修改配置文件, 随时打包不同基础数据配置信息的项目. 1.新建maven项目,   在pom.xml中添加 profile节点信息如下: <profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <envi

  • maven profile自动切换环境参数的2种方法详解

    前言 痛点: 在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环境对项目的需求也不相同. 在此之前,我们往往需要手动去修改相对应的配置文件然后打成war,才能部署到相应的环境上. 但是这样很容易出现问题,因为很容易出现少改或者漏改,造成不必要的麻烦 幻想: 要是有一种东西,能让我们打war的时候指定一个参数,就能自动把项目编译成对应环境的war,那该有多幸福啊!!! 结果:这样的东西还真有,那就是maven-profile 在开发过程中,我们经常会根

  • Maven中pom.xml配置文件详细介绍

    setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件:而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件. 基础配置 一个典型的pom.xml文件配置如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org

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

    目录 1.profiles是什么?有什么作用 2.如何配置 3.区别构建发布包 maven多环境profiles参数切换 项目结构图 1.profiles是什么?有什么作用 在maven构建的项目都存在一个pom.xml的项目对象模型配置文件,用于约束项目(如:jar包管理.构建管理等).profiles是pom.xml中的一个配置项. 我们在开发项目时一般都会区分线上环境和测试环境,这两个环境需要切换以适应不同的环境需求 正式环境的配置,一般放置于src/main/resources下,而测试

  • 基于pandas中expand的作用详解

    expand表示是否把series类型转化为DataFrame类型 下面代码中的n表示去掉下划线"_"的数量 代码如下: import numpy as np import pandas as pd s2 = pd.Series(['a_b_c_f_j', 'c_d_e_f_h', np.nan, 'f_g_h_x_g']) print("-----------------------------------") print(s2.str.split('_')) p

  • Pytorch中.new()的作用详解

    一.作用 创建一个新的Tensor,该Tensor的type和device都和原有Tensor一致,且无内容. 二.使用方法 如果随机定义一个大小的Tensor,则新的Tensor有两种创建方法,如下: inputs = torch.randn(m, n) new_inputs = inputs.new() new_inputs = torch.Tensor.new(inputs) 三.具体代码 import torch rectangle_height = 1 rectangle_width

  • 聊聊maven的pom.xml中的exclusions标签的作用

    maven pom.xml的exclusions标签作用 项目中的例子 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupI

  • Java Maven settings.xml中私有仓库配置详解

    目录 Maven setting中私有仓库配置浅析 简单maven配置 mirrors profile repositories 总结 Maven setting中私有仓库配置浅析 最近遇到过不少这样那样的问题,曾经做过maven的分享,但是发现当时部分内容还是太想当然了,下面经过尝试后简单总结下: 首先几个逻辑: pom>启用的profile>maven原有配置 mirror配置mirrorOf和id匹配优先 简单maven配置 一般大家的配置(略去无关私有仓库配置)都是这样的 <mi

  • golang中context的作用详解

    当一个goroutine可以启动其他goroutine,而这些goroutine可以启动其他goroutine,依此类推,则第一个goroutine应该能够向所有其它goroutine发送取消信号. 上下文包的唯一目的是在goroutine之间执行取消信号,而不管它们如何生成.上下文的接口定义为: type Context interface { Deadline() (deadline time.Time, ok bool) Done() <- chan struct{} Err() erro

  • vue3中defineComponent 的作用详解

    vue3中,新增了 defineComponent ,它并没有实现任何的逻辑,只是把接收的 Object 直接返回,它的存在是完全让传入的整个对象获得对应的类型,它的存在就是完全为了服务 TypeScript 而存在的. 我都知道普通的组件就是一个普通的对象,既然是一个普通的对象,那自然就不会获得自动的提示, import { defineComponent } from 'vue' const component = { name: 'Home', props:{ data: String,

  • SQLSERVER 中GO的作用详解

    具体不废话了,请看下文详解. use db_CSharp go select *, 备注=case when Grade>=90 then '成绩优秀' when Grade<90 and Grade>=80 then '成绩良好' when Grade<80 and Grade>=70 then '成绩及格' else '不及格' end from tb_Grade 如果只是执行一条语句,有没有GO都一样 如果多条语句之间用GO分隔开就不一样了 每个被GO分隔的语句都是一个

  • java中Serializable接口作用详解

    本文为大家解析java中Serializable接口的作用,具体内容如下 1.(serializable)主要支持对象的回复,所以可以用来保存当前的程序系统状态,远程方法调用RMI(远程机器必须含有必要的.class文件,否则将掷出classNotFound   Exception),但是因为它将对象数据自动全部保存,你根本无法插手,因此对于一些敏感字段(如:password)存在安全问题.但相应有很多解决的方法,例如可以在敏感字段的声明中使用transient关键字,或者去继承external

  • Vue中keep-alive组件作用详解

    keep-alive组件的作用,供大家参考 作用:用于保留组件状态或避免重新渲染(缓存的作用) 比如:当一个目录页面与一个详情页面,用户经常:打开目录页面=>进入详情页面=>返回目录页面=>打开详情页面,这样目录页面就是一个使用频率很高的页面,那么就可以对目录组件使用<keep-alive></keep-alive>进行缓存,这样用户每次返回目录时,都能从缓存中快速渲染,而不用重新渲染. 属性 该标签有两个属性include与exclude: include:字符

随机推荐