文档章节

Maven知识点记录 - profile

Galy_绿
 Galy_绿
发布于 2015/12/19 23:26
字数 1554
阅读 14
收藏 0
点赞 0
评论 0

在实际开发过程中,开发环境,测试环境和最后部署上线的环境都是不一样的,像数据库连接,都是要变的。 如果不使用Maven的话,我想到的就是修改配置文件,手动的修改; 使用Maven的话,就简单的多了。 先来看一个pom文件: [html] view plaincopy <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 段,然后在编译时选择其中的一个用于覆盖项目文件原先的定义。 [html] view plaincopy <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属性来激活 [html] view plaincopy <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)配置默认自动激活 [html] view plaincopy <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 激活它。激活方式如下: [html] view plaincopy <settings>
...
<activeProfiles>
<activeProfile>local_db</activeProfile>
</activeProfiles>
</settings>

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

2.filtering功能 这里的意思是,过滤src/main/resources下的文件 [html] view plaincopy <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 [java] view plaincopy hello ,${username}
jdbc.url = ${jdbc.url}
jdbc.username = ${jdbc.username}
jdbc.password = ${jdbc.password}

applicationContext.xml [java] view plaincopy

<?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就是最上面提到的: [html] view plaincopy <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 注意 [java] view plaincopy <properties>
<username>lufei</username>
<password>shishi</password>
</properties>

[html] view plaincopy <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.使用默认激活方式 [java] view plaincopy mvn clean compile

进入target/classes目录

打开demo.properties和applicationContext.xml文件 会发现,在development中指定的属性都已经成功替换

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

2.使用命令更改激活方式 重新输入命令 [java] view plaincopy mvn clean compile -P test

我们启用了test环境的配置方式 再次进入target/classes文件夹下查看,会发现不同的替换

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

本文转载自:http://blog.csdn.net/yuguiyang1990/article/details/11488031

共有 人打赏支持
Galy_绿
粉丝 12
博文 132
码字总数 14908
作品 0
海淀
maven 配置自动本地/线上不同配置自动打包

工程结构:在resource下新建开发,线上不同文件夹存放不同配置文件 pom.xml配置文件 maven-compiler-plugin 1.7 1.7 UTF-8

易天行j
02/09
0
0
Maven提高篇系列之四——使用Profile

Maven提高篇系列之四——使用Profile 在本系列的上一篇文章中,我们讲到了如何将项目部署到Repository中,在本文中,我们将讲到如何使用Profile。 在开发项目时,设想有以下场景: 你的Maven...

ihaolin
2014/04/09
0
0
记一次Maven的profile文件过滤引起的字符编码BUG

本文记录了一次文件编码差异引起的profile替换占位符失败的bug,及处理思路。记录成文,以便以后反思,或让后来遇到问题的同学能有据可循。 起因及bug描述 相信大家对于Maven中打包不同环境使...

飞来来
2017/11/26
0
0
Java Web dev搭建经验总结

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 回馈分析法使我看到,我对专业技术人员,不管是工程师、会计师还是市场研究人员,都容易从直觉上去理解他们。这...

泥沙砖瓦浆木匠
2016/09/10
61
0
基于maven2打包不同jdk版本的包

通常在一些特别情况下,我们需要为单独某一个构件打包多个不同jdk版本的包,用来支持不同的jdk,基于maven我们就可以很方便的做到这点。 1、在项目的pom文件中加入如下配置 2、然后执行命令打...

mj4738
2013/04/17
0
0
使用 Maven Profile 和 Filtering 打各种环境的包

先转载记录一下,等有空了再来仔细看一下 每个项目都会有多套运行环境(开发,测试,正式等等),不同的环境配置也不尽相同(如jdbc.url),借助Jenkins和自动部署提供的便利,我们可以把不同...

stephen_wu
2016/08/24
14
0
Maven2的配置文件settings.xml

Maven2的配置文件settings.xml 简介: 概览 当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们使用settings.xml中的settings元素来确定这些配...

LeBlancs
2016/12/29
28
0
微服务之配置服务器切换profile

最近遇到Spring-boot的多个profile切换问题,需求是这样的:微服务中引入了Spring Cloud Config,服务启动的时候,从Config Server中读取该实例对应的配置信息。本地开发环境可能使用的profi...

aoho
2017/11/16
0
0
使用nexus在局域网内搭建maven私服及idea的使用

一:JDK 1.Installation Download the lasted version of the JDK from: http://java.sun.com ,now is JDK1.7.0_10. Unpack the arcive to /usr/lib/jvm/java with the below command line: ......

iphoenix
2016/08/24
1K
2
换个视角看 Maven:一个领域平台的优美设计

作为一个Java程序员,Maven是再熟悉不过的工具了, 它提供了构建项目的一个框架, 在默认情况下为我们提供了许多常用的Plugin,其中便包括构建Java项目的Plugin,还有War,Ear等。除此之外还提...

小云栖
2016/01/19
7.8K
16

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring boot中swagger2使用

1.pom.xml中添加 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version>......

说回答
6分钟前
0
0
tomcat虚拟路径的几种配置方法

tomcat虚拟路径的几种配置方法 一般我们都是直接引用webapps下面的web项目,如果我们要部署一个在其它地方的WEB项目,这就要在TOMCAT中设置虚拟路径了,Tomcat的加载web顺序是先加载 $Tomcat_ho...

Helios51
18分钟前
1
0
Mac 安装jupyter notebook的过程

MAC台式机 python:mac下自带Python 2.7.10 1.先升级了pip安装工具:sudo python -m pip install --upgrade --force pip 2.安装setuptools 工具:sudo pip install setuptools==33.1.1 3.安装......

火力全開
23分钟前
0
0
导航守卫解释与例子

“导航”表示路由正在发生改变。 正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。 记住...

tianyawhl
23分钟前
0
0
Java日志框架-logback配置文件多环境日志配置(开发、测试、生产)(原始解决方法)

说明:这种方式应该算是最通用的,原理是通过判断标签实现。 <!-- if-then form --> <if condition="some conditional expression"> <then> ... </then> </if> ......

浮躁的码农
38分钟前
1
0
FTP传输时的两种登录方式和区别

登录方式 匿名登录 用户名为: anonymous。 密码为:任何合法 email 地址。 授权登录 用户名为:用户在远程系统中的用户帐号。 密码为:用户在远程系统中的用户密码。 区别 匿名登录 只能访问...

寰宇01
39分钟前
0
0
plsql developer 配置监听(不安装oracle客户端)

plsql developer 配置监听(不安装oracle客户端)

微小宝
46分钟前
1
0
数据库(分库分表)中间件对比

本人的宗旨就是,能copy的,绝对不手写。 分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm。 根据一定的规则把数据文件(MYD)和索...

奔跑吧代码
50分钟前
2
0
Netty与Reactor模式详解

在学习Reactor模式之前,我们需要对“I/O的四种模型”以及“什么是I/O多路复用”进行简单的介绍,因为Reactor是一个使用了同步非阻塞的I/O多路复用机制的模式。 I/O的四种模型 I/0 操作 主要...

hutaishi
56分钟前
1
0
【2018.07.16学习笔记】【linux高级知识 20.16-20.19】

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

lgsxp
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部