Maven知识点记录 - profile
在实际开发过程中,开发环境,测试环境和最后部署上线的环境都是不一样的,像数据库连接,都是要变的。
如果不使用Maven的话,我想到的就是修改配置文件,手动的修改;
使用Maven的话,就简单的多了。
先来看一个pom文件:
- <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.ygy</groupId>
- <artifactId>maven</artifactId>
- <packaging>war</packaging>
- <version>0.0.1-SNAPSHOT</version>
- <name>maven Maven Webapp</name>
- <url>http://maven.apache.org</url>
- <!-- 属性配置 -->
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <profiles>
- <profile>
- <id>devlopment</id>
- <properties>
- <username>lufei</username>
- <password>shishi</password>
- </properties>
- <build>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- </build>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- </profile>
- <profile>
- <id>test</id>
- <properties>
- <jdbc.url>http://www.deppon.com</jdbc.url>
- <jdbc.username>haha</jdbc.username>
- <jdbc.password>can you</jdbc.password>
- </properties>
- <build>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- </build>
- <activation>
- <activeByDefault>false</activeByDefault>
- </activation>
- </profile>
- </profiles>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- <scope>test</scope>
- </dependency>
- <!-- 添加Spring依赖 -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- <version>3.1.1.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>3.1.1.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>3.1.1.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>3.1.1.RELEASE</version>
- </dependency>
- </dependencies>
- <build>
- <finalName>maven</finalName>
- </build>
- </project>
其中,有些标签可能没有用过,就是<profiles>,<profile>
Profile 的作用是允许你在项目文件(pom.xml)里定义若干个 profile 段,然后在编译时选择其中的一个用于覆盖项目文件原先的定义。
- <profile>
- <id>devlopment</id>
- <properties>
- <username>lufei</username>
- <password>shishi</password>
- </properties>
- <build>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- </build>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- </profile>
我们大体上可以看懂,下面简单介绍一下具体的用法:
1.activation 激活方式
1)根据环境自动激活:如可以根据JDK版本,OS,Maven属性来激活
- <profile>
- <id>dev</id>
- <activation>
- <activeByDefault>false</activeByDefault>
- <jdk>1.5</jdk>
- <os>
- <name>Windows XP</name>
- <family>Windows</family>
- <arch>x86</arch>
- <version>5.1.2600</version>
- </os>
- <property>
- <name>mavenVersion</name>
- <value>2.0.5</value>
- </property>
- <file>
- <exists>file2.properties</exists>
- <missing>file1.properties</missing>
- </file>
- </activation>
- ...
- </profile>
2)通过命令行激活
这是最直接和最简单的方式,比如你定义了一个名为 myProfile 的 profile,你只需要在命令行输入 mvn clean install -P myprofile 就能将其激活,
这种方式的好处很明显,但是有一个很大的弊端,当 profile 比较多的时候,在命令行输入这写 -P 参数会让人觉得厌烦,
所以,如果你一直用这种方式,觉得厌烦了,可以考虑使用其它自动激活的方式。
3)配置默认自动激活
- <profile>
- <id>dev</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- ...
- </profile>
4)配置 settings.xml 文件 profile 激活
settings.xml 文件可以在 ~/.m2 目录下,为某个用户的自定义行为服务,也可以在 M2_HOME/conf 目录下,为整台机器的所有用户服务。
而前者的配置会覆盖后者。同理,由 settings.xml 激活的 profile 意在为用户或者整个机器提供特定环境配置,
比如,你可以在某台机器上配置一个指向本地数据库 URL 的 profile,然后使用该机器的 settings.xml 激活它。激活方式如下:
- <settings>
- ...
- <activeProfiles>
- <activeProfile>local_db</activeProfile>
- </activeProfiles>
- </settings>
(注:参考博客 激活Maven profile的几种方式 )
2.filtering功能
这里的意思是,过滤src/main/resources下的文件
- <build>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- </build>
Filtering 是 Maven Resources Plugin 的一个功能,它会使用系统属性或者项目属性的值替换资源文件(*.properties,*.xml)当中 ${…} 符号的值。
比如你系统属性有一项 “user.name=foobar”,那么资源文件当中的 ${user.name} 符号会在 Maven 编译时自动被替换为 “foobar”。
(注:参考博客 Apache Maven 使用 profile 和 filtering 实现多种环境下的资源)
Maven官方Filter讲解:http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
3.说了这么多,下面来实践一下
这是我们的Maven项目:
一个是配置文件,一个是Spring的配置文件
demo.properties
- hello ,${username}
- jdbc.url = ${jdbc.url}
- jdbc.username = ${jdbc.username}
- jdbc.password = ${jdbc.password}
applicationContext.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
- <bean id="simple" class="org.ygy.maven.SimpleEntity">
- <property name="username" value="${username}"></property>
- <property name="password" value="${password}"></property>
- </bean>
- </beans>
pom.xml就是最上面提到的:
- <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.ygy</groupId>
- <artifactId>maven</artifactId>
- <packaging>war</packaging>
- <version>0.0.1-SNAPSHOT</version>
- <name>maven Maven Webapp</name>
- <url>http://maven.apache.org</url>
- <!-- 属性配置 -->
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <profiles>
- <profile>
- <id>devlopment</id>
- <properties>
- <username>lufei</username>
- <password>shishi</password>
- </properties>
- <build>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- </build>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- </profile>
- <profile>
- <id>test</id>
- <properties>
- <jdbc.url>http://www.deppon.com</jdbc.url>
- <jdbc.username>haha</jdbc.username>
- <jdbc.password>can you</jdbc.password>
- </properties>
- <build>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- </build>
- <activation>
- <activeByDefault>false</activeByDefault>
- </activation>
- </profile>
- </profiles>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- <scope>test</scope>
- </dependency>
- <!-- 添加Spring依赖 -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- <version>3.1.1.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>3.1.1.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>3.1.1.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>3.1.1.RELEASE</version>
- </dependency>
- </dependencies>
- <build>
- <finalName>maven</finalName>
- </build>
- </project>
这里有2个profile,一个是development,一个是test,默认自动激活development
注意
- <properties>
- <username>lufei</username>
- <password>shishi</password>
- </properties>
- <properties>
- <username>索隆</username>
- <password>gogo</password>
- <jdbc.url>http://www.deppon.com</jdbc.url>
- <jdbc.username>haha</jdbc.username>
- <jdbc.password>can you</jdbc.password>
- </properties>
这里的<username>和<password>就是我们在配置文件中使用的会变化的配置,Maven会自动将 ${}替换成profile中配置的。
接下来,我们进入到该项目的根目录下,执行Maven命令
1.使用默认激活方式
- mvn clean compile
进入target/classes目录
打开demo.properties和applicationContext.xml文件
会发现,在development中指定的属性都已经成功替换
而demo.properties中,jdbc相关的并没有配置,所以没有替换
2.使用命令更改激活方式
重新输入命令
- mvn clean compile -P test
我们启用了test环境的配置方式
再次进入target/classes文件夹下查看,会发现不同的替换
好了,到这里就可以简单使用了。
Maven知识点记录 - profile相关推荐
- SpringMVC知识点记录
SpringMVC知识点记录 1. SpringMVC简介 2. 入门案例 3. @RequestMapping注解 3.1 @RequestMapping注解的功能 3.2 @RequestMapp ...
- Maven中的profile和spring boot中的profile进行结合
2019独角兽企业重金招聘Python工程师标准>>> 有一些应用,采用了spring boot和spring boot profile.然后想把maven 中的profile和sp ...
- javaweb基础知识点记录2
javaweb基础知识点记录 1.在service方法中,首先获得请求的方法名,然后根据方法名调用对应的doXXXX方法,比如说请求参数为GET,那么就会去调用doGet方法,请求参数为POST,那么 ...
- javaweb基础知识点记录1
javaweb基础知识点记录 1.当我们通过在浏览器的输入栏中直接输入网址的方式访问网页的时候,浏览器采用的就是GET方法向服务器获取资源. 2.我们可以将Servlet看做是嵌套了HTML代码的ja ...
- Maven : maven异常记录-must be unique maven duplicate declaration of version
1.美图 2.背景 maven异常记录 INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountere ...
- 毕业论文知识点记录(四)——MaxEnt模型
毕业论文知识点记录(四)--MaxEnt模型 0 序言 经过了几次文章分享,数据已经准备得差不多了,师姐说可以先利用现有数据跑一个结果,然后再逐步增加想要的环境数据,改善结果. 另外,谨记师姐的一句话 ...
- 毕业论文知识点记录(六)——基于R语言优化maxent模型
毕业论文知识点记录(六)--基于R语言优化maxent模型 第一步:R安装 这个网上都有很多详细的步骤,就不再详细介绍了. 第二步:R安装包 因为优化maxent模型需要用到kuenm程序包,但是官网 ...
- 毕业论文知识点记录(三)——SPSS去相关
毕业论文知识点记录(三)--SPSS去相关 #(一)数据下载 1.草地贪夜蛾的发生记录,这个数据在前面文章中有描述.草地贪夜蛾发生记录下载 2.气候数据 数据来源:worldclim 我选择的分辨率是 ...
- maven异常记录-must be unique
maven异常记录 [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while b ...
最新文章
- 编码实现字符串转整型的函数(实现函数atoi的功能)
- APP-V与RemotoAPP
- 一个Web前端自学者的自述
- Imagination
- Arduino编译bootloader
- 二叉树层次遍历--广度遍历和深度遍历
- 拆点并查集(poj 1182: 食物链)
- WDSR:Wide Activation for Efficient and Accurate Image Super-Resolution
- FlinkSQL 列转行/解开map array/unnest/lateral table udtf
- MI(mutal information)and Entropy
- 互联网公司中秋节礼盒大比拼(2019版)
- 3d在c语言中3的作用,c语言中%3d是什么意思?
- Referenced file contains errors (xml文件第一行小红叉错误)
- Prompt+对比学习,更好地学习句子表征
- CASAIM和工信部第五研究所(中国赛宝实验室)合作开展三维测量技术在产品可靠性研究的精确尺寸检测应用和建模仿真试验
- Linux 7 种文件类型
- 路由器wan口和lan口短接_路由器WAN口和LAN口功能介绍
- [深入研究4G/5G/6G专题-4]: DTU系统架构与软件架构
- #Arduino,去抖动
- 下载安装setuptools
热门文章
- eigen 列拼接_R语言-强大的矩阵运算
- hyper-v 安装centos7 后,虚拟机无法访问网络。
- ibm linux mq 发送消息_IBM MQ简明教程——2. 将消息发送至远程队列
- Timeline窗口详解
- Unity3d接入视频监控
- 带滚动条html转pdf只有一页,关于html页面导出pdf滚动条以下显示不全的问题
- OpenShift 4 - 用 Quay Operator 安装 Quay 环境(4.10 修正)
- OpenShift 4 - DevSecOps Workshop (4) - 为 Task 增加参数和Workspace
- Visual Studio 2019 v16.6 和 v16.7 Preview 1 发布
- C#坏习惯:通过不好的例子学习如何制作好的代码——第5部分