Maven学习(十六)--Maven知识点记录 - profile

在实际开发过程中,开发环境,测试环境和最后部署上线的环境都是不一样的,像数据库连接,都是要变的。

如果不使用Maven的话,我想到的就是修改配置文件,手动的修改;

使用Maven的话,就简单的多了。

先来看一个pom文件:

[html]  view plain copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.   
  5.     <groupId>org.ygy</groupId>  
  6.     <artifactId>maven</artifactId>  
  7.     <packaging>war</packaging>  
  8.     <version>0.0.1-SNAPSHOT</version>  
  9.   
  10.     <name>maven Maven Webapp</name>  
  11.     <url>http://maven.apache.org</url>  
  12.   
  13.     <!-- 属性配置 -->  
  14.     <properties>  
  15.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  16.     </properties>  
  17.   
  18.   
  19.     <profiles>  
  20.         <profile>  
  21.             <id>devlopment</id>  
  22.   
  23.             <properties>  
  24.                 <username>lufei</username>  
  25.                 <password>shishi</password>  
  26.             </properties>  
  27.   
  28.             <build>  
  29.                 <resources>  
  30.                     <resource>  
  31.                         <directory>src/main/resources</directory>  
  32.                         <filtering>true</filtering>  
  33.                     </resource>  
  34.                 </resources>  
  35.             </build>  
  36.   
  37.             <activation>  
  38.                 <activeByDefault>true</activeByDefault>  
  39.             </activation>  
  40.   
  41.         </profile>  
  42.   
  43.         <profile>  
  44.             <id>test</id>  
  45.             <properties>  
  46.                 <jdbc.url>http://www.deppon.com</jdbc.url>  
  47.                 <jdbc.username>haha</jdbc.username>  
  48.                 <jdbc.password>can you</jdbc.password>  
  49.             </properties>  
  50.             <build>  
  51.                 <resources>  
  52.                     <resource>  
  53.                         <directory>src/main/resources</directory>  
  54.                         <filtering>true</filtering>  
  55.                     </resource>  
  56.                 </resources>  
  57.             </build>  
  58.             <activation>  
  59.                 <activeByDefault>false</activeByDefault>  
  60.             </activation>  
  61.         </profile>  
  62.     </profiles>  
  63.   
  64.     <dependencies>  
  65.         <dependency>  
  66.             <groupId>junit</groupId>  
  67.             <artifactId>junit</artifactId>  
  68.             <version>4.10</version>  
  69.             <scope>test</scope>  
  70.         </dependency>  
  71.   
  72.         <!-- 添加Spring依赖 -->  
  73.         <dependency>  
  74.             <groupId>org.springframework</groupId>  
  75.             <artifactId>spring-core</artifactId>  
  76.             <version>3.1.1.RELEASE</version>  
  77.         </dependency>  
  78.   
  79.         <dependency>  
  80.             <groupId>org.springframework</groupId>  
  81.             <artifactId>spring-beans</artifactId>  
  82.             <version>3.1.1.RELEASE</version>  
  83.         </dependency>  
  84.   
  85.         <dependency>  
  86.             <groupId>org.springframework</groupId>  
  87.             <artifactId>spring-context</artifactId>  
  88.             <version>3.1.1.RELEASE</version>  
  89.         </dependency>  
  90.   
  91.         <dependency>  
  92.             <groupId>org.springframework</groupId>  
  93.             <artifactId>spring-jdbc</artifactId>  
  94.             <version>3.1.1.RELEASE</version>  
  95.         </dependency>  
  96.   
  97.     </dependencies>  
  98.   
  99.     <build>  
  100.         <finalName>maven</finalName>  
  101.     </build>  
  102. </project>  

其中,有些标签可能没有用过,就是<profiles>,<profile>

Profile 的作用是允许你在项目文件(pom.xml)里定义若干个 profile 段,然后在编译时选择其中的一个用于覆盖项目文件原先的定义。

[html]  view plain copy
  1. <profile>  
  2.             <id>devlopment</id>  
  3.   
  4.             <properties>  
  5.                 <username>lufei</username>  
  6.                 <password>shishi</password>  
  7.             </properties>  
  8.   
  9.             <build>  
  10.                 <resources>  
  11.                     <resource>  
  12.                         <directory>src/main/resources</directory>  
  13.                         <filtering>true</filtering>  
  14.                     </resource>  
  15.                 </resources>  
  16.             </build>  
  17.   
  18.             <activation>  
  19.                 <activeByDefault>true</activeByDefault>  
  20.             </activation>  
  21.   
  22.         </profile>  

我们大体上可以看懂,下面简单介绍一下具体的用法:

1.activation 激活方式

1)根据环境自动激活:如可以根据JDK版本,OS,Maven属性来激活

[html]  view plain copy
  1. <profile>  
  2.   <id>dev</id>  
  3.   <activation>  
  4.     <activeByDefault>false</activeByDefault>  
  5.     <jdk>1.5</jdk>  
  6.     <os>  
  7.       <name>Windows XP</name>  
  8.       <family>Windows</family>  
  9.       <arch>x86</arch>  
  10.       <version>5.1.2600</version>  
  11.     </os>  
  12.     <property>  
  13.       <name>mavenVersion</name>  
  14.       <value>2.0.5</value>  
  15.     </property>  
  16.     <file>  
  17.       <exists>file2.properties</exists>  
  18.       <missing>file1.properties</missing>  
  19.     </file>  
  20.   </activation>  
  21.   ...  
  22. </profile>  

2)通过命令行激活

这是最直接和最简单的方式,比如你定义了一个名为 myProfile 的 profile,你只需要在命令行输入 mvn clean install -P myprofile 就能将其激活,

这种方式的好处很明显,但是有一个很大的弊端,当 profile 比较多的时候,在命令行输入这写 -P 参数会让人觉得厌烦,

所以,如果你一直用这种方式,觉得厌烦了,可以考虑使用其它自动激活的方式。

3)配置默认自动激活

[html]  view plain copy
  1. <profile>  
  2.   <id>dev</id>  
  3.   <activation>  
  4.     <activeByDefault>true</activeByDefault>  
  5.   </activation>  
  6.   ...  
  7. </profile>  

4)配置 settings.xml 文件 profile 激活

settings.xml 文件可以在 ~/.m2 目录下,为某个用户的自定义行为服务,也可以在 M2_HOME/conf 目录下,为整台机器的所有用户服务。

而前者的配置会覆盖后者。同理,由 settings.xml 激活的 profile 意在为用户或者整个机器提供特定环境配置,

比如,你可以在某台机器上配置一个指向本地数据库 URL 的 profile,然后使用该机器的 settings.xml 激活它。激活方式如下:

[html]  view plain copy
  1. <settings>  
  2.   ...  
  3.   <activeProfiles>  
  4.     <activeProfile>local_db</activeProfile>  
  5.   </activeProfiles>  
  6. </settings>  

(注:参考博客   激活Maven profile的几种方式


2.filtering功能

这里的意思是,过滤src/main/resources下的文件

[html]  view plain copy
  1. <build>  
  2.                 <resources>  
  3.                     <resource>  
  4.                         <directory>src/main/resources</directory>  
  5.                         <filtering>true</filtering>  
  6.                     </resource>  
  7.                 </resources>  
  8.             </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

[java]  view plain copy
  1. hello ,${username}  
  2. jdbc.url = ${jdbc.url}  
  3. jdbc.username = ${jdbc.username}  
  4. jdbc.password = ${jdbc.password}  

applicationContext.xml

[java]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="  
  6.      http://www.springframework.org/schema/beans   
  7.      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.      http://www.springframework.org/schema/tx   
  9.      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  10.      http://www.springframework.org/schema/aop   
  11.      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  12.      http://www.springframework.org/schema/context  
  13.      http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  14.   
  15.     <bean id="simple" class="org.ygy.maven.SimpleEntity">  
  16.         <property name="username" value="${username}"></property>  
  17.         <property name="password" value="${password}"></property>  
  18.     </bean>  
  19. </beans>  

pom.xml就是最上面提到的:

[html]  view plain copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.   
  5.     <groupId>org.ygy</groupId>  
  6.     <artifactId>maven</artifactId>  
  7.     <packaging>war</packaging>  
  8.     <version>0.0.1-SNAPSHOT</version>  
  9.   
  10.     <name>maven Maven Webapp</name>  
  11.     <url>http://maven.apache.org</url>  
  12.   
  13.     <!-- 属性配置 -->  
  14.     <properties>  
  15.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  16.     </properties>  
  17.   
  18.   
  19.     <profiles>  
  20.         <profile>  
  21.             <id>devlopment</id>  
  22.   
  23.             <properties>  
  24.                 <username>lufei</username>  
  25.                 <password>shishi</password>  
  26.             </properties>  
  27.   
  28.             <build>  
  29.                 <resources>  
  30.                     <resource>  
  31.                         <directory>src/main/resources</directory>  
  32.                         <filtering>true</filtering>  
  33.                     </resource>  
  34.                 </resources>  
  35.             </build>  
  36.   
  37.             <activation>  
  38.                 <activeByDefault>true</activeByDefault>  
  39.             </activation>  
  40.   
  41.         </profile>  
  42.   
  43.         <profile>  
  44.             <id>test</id>  
  45.             <properties>  
  46.                 <jdbc.url>http://www.deppon.com</jdbc.url>  
  47.                 <jdbc.username>haha</jdbc.username>  
  48.                 <jdbc.password>can you</jdbc.password>  
  49.             </properties>  
  50.             <build>  
  51.                 <resources>  
  52.                     <resource>  
  53.                         <directory>src/main/resources</directory>  
  54.                         <filtering>true</filtering>  
  55.                     </resource>  
  56.                 </resources>  
  57.             </build>  
  58.             <activation>  
  59.                 <activeByDefault>false</activeByDefault>  
  60.             </activation>  
  61.         </profile>  
  62.     </profiles>  
  63.   
  64.     <dependencies>  
  65.         <dependency>  
  66.             <groupId>junit</groupId>  
  67.             <artifactId>junit</artifactId>  
  68.             <version>4.10</version>  
  69.             <scope>test</scope>  
  70.         </dependency>  
  71.   
  72.         <!-- 添加Spring依赖 -->  
  73.         <dependency>  
  74.             <groupId>org.springframework</groupId>  
  75.             <artifactId>spring-core</artifactId>  
  76.             <version>3.1.1.RELEASE</version>  
  77.         </dependency>  
  78.   
  79.         <dependency>  
  80.             <groupId>org.springframework</groupId>  
  81.             <artifactId>spring-beans</artifactId>  
  82.             <version>3.1.1.RELEASE</version>  
  83.         </dependency>  
  84.   
  85.         <dependency>  
  86.             <groupId>org.springframework</groupId>  
  87.             <artifactId>spring-context</artifactId>  
  88.             <version>3.1.1.RELEASE</version>  
  89.         </dependency>  
  90.   
  91.         <dependency>  
  92.             <groupId>org.springframework</groupId>  
  93.             <artifactId>spring-jdbc</artifactId>  
  94.             <version>3.1.1.RELEASE</version>  
  95.         </dependency>  
  96.   
  97.     </dependencies>  
  98.   
  99.     <build>  
  100.         <finalName>maven</finalName>  
  101.     </build>  
  102. </project>  

这里有2个profile,一个是development,一个是test,默认自动激活development

注意

[java]  view plain copy
  1. <properties>  
  2.                 <username>lufei</username>  
  3.                 <password>shishi</password>  
  4.             </properties>  


[html]  view plain copy
  1. <properties>  
  2.                 <username>索隆</username>  
  3.                 <password>gogo</password>  
  4.                 <jdbc.url>http://www.deppon.com</jdbc.url>  
  5.                 <jdbc.username>haha</jdbc.username>  
  6.                 <jdbc.password>can you</jdbc.password>  
  7.             </properties>  


这里的<username>和<password>就是我们在配置文件中使用的会变化的配置,Maven会自动将 ${}替换成profile中配置的。

接下来,我们进入到该项目的根目录下,执行Maven命令


1.使用默认激活方式

[java]  view plain copy
  1. mvn clean compile  


进入target/classes目录

打开demo.properties和applicationContext.xml文件

会发现,在development中指定的属性都已经成功替换


而demo.properties中,jdbc相关的并没有配置,所以没有替换



2.使用命令更改激活方式

重新输入命令

[java]  view plain copy
  1. mvn clean compile -P test  

我们启用了test环境的配置方式

再次进入target/classes文件夹下查看,会发现不同的替换


好了,到这里就可以简单使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值