profile简介

profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。比如说,我们可以通过profile定义在jdk1.5以上使用一套配置信息,在jdk1.5以下使用另外一套配置信息;或者有时候我们可以通过操作系统的不同来使用不同的配置信息,比如windows下是一套信息,linux下又是另外一套信息,等等。具体的激活条件有哪些我在后文会讲到。

profile的定义位置

对于使用Maven3,我们可以有多个地方定义profile。定义的地方不同,它的作用范围也不同。

(1)    针对于特定项目的profile配置我们可以定义在该项目的pom.xml中。

(2)    针对于特定用户的profile配置,我们可以在用户的settings.xml文件中定义profile。该文件在用户家目录下的“.m2”目录下。

(3)    全局的profile配置。全局的profile是定义在Maven安装目录下的“conf/settings.xml”文件中的。

4.3     profile中能定义的信息

profile中能够定义的配置信息跟profile所处的位置是相关的。以下就分两种情况来讨论,一种是定义在settings.xml中,另一种是定义在pom.xml中。

4.3.1  profile定义在settings.xml中

当profile定义在settings.xml中时意味着该profile是全局的,它会对所有项目或者某一用户的所有项目都产生作用。因为它是全局的,所以在settings.xml中只能定义一些相对而言范围宽泛一点的配置信息,比如远程仓库等。而一些比较细致一点的需要根据项目的不同来定义的就需要定义在项目的pom.xml中。具体而言,能够定义在settings.xml中的信息有<repositories>、<pluginRepositories>和<properties>。定义在<properties>里面的键值对可以在pom.xml中使用。

4.3.2  profile定义在pom.xml中

定义在pom.xml中的profile可以定义更多的信息。主要有以下这些:

l  <repositories>

l  <pluginRepositories>

l  <dependencies>

l  <plugins>

l  <properties>

l  <dependencyManagement>

l  <distributionManagement>

l  还有build元素下面的子元素,主要包括:

<defaultGoal>

<resources>

<testResources>

<finalName>

4.4     profile的激活方式

Maven给我们提供了多种不同的profile激活方式。比如我们可以使用-P参数显示的激活一个profile,也可以根据环境条件的设置让它自动激活等。下面将对它们一一进行介绍:

4.4.1  使用activeByDefault设置激活

先看下面一个配置

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <properties>
  5. <hello>world</hello>
  6. </properties>
  7. <activation>
  8. <activeByDefault>true</activeByDefault>
  9. </activation>
  10. </profile>
  11. <profile>
  12. <id>profileTest2</id>
  13. <properties>
  14. <hello>andy</hello>
  15. </properties>
  16. </profile>
  17. </profiles>

我们可以在profile中的activation元素中指定激活条件,当没有指定条件,然后指定activeByDefault为true的时候就表示当没有指定其他profile为激活状态时,该profile就默认会被激活。所以当我们调用mvn package的时候上面的profileTest1将会被激活,但是当我们使用mvn package –P profileTest2的时候将激活profileTest2,而这个时候profileTest1将不会被激活。

4.4.2  在settings.xml中使用activeProfiles指定处于激活状态的profile

我们可以在settings.xml中使用activeProfiles来指定需要激活的profile,这种方式激活的profile将所有情况下都处于激活状态。比如现在我们定义了如下两个profile

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <properties>
  5. <hello>world</hello>
  6. </properties>
  7. </profile>
  8. <profile>
  9. <id>profileTest2</id>
  10. <properties>
  11. <hello>andy</hello>
  12. </properties>
  13. </profile>
  14. </profiles>

这里的profile可以是定义在settings.xml中的,也可以是定义在pom.xml中的。这个时候如果我们需要指定profileTest1为激活状态,那么我们就可以在settings.xml中定义activeProfiles,具体定义如下:

  1. <activeProfiles>
  2. <activeProfile>profileTest1</activeProfile>
  3. </activeProfiles>

考虑这样一种情况,我们在activeProfiles下同时定义了多个需要激活的profile。这里还拿上面的profile定义来举例,我们定义了同时激活profileTest1和profileTest2。

  1. <activeProfiles>
  2. <activeProfile>profileTest1</activeProfile>
  3. <activeProfile>profileTest2</activeProfile>
  4. </activeProfiles>

从profileTest1和profileTest2我们可以看出它们共同定义了属性hello。那么这个时候我在pom.xml中使用属性hello的时候,它到底取的哪个值呢?是根据activeProfile定义的顺序,后面的覆盖前面的吗?根据我的测试,答案是非也,它是根据profile定义的先后顺序来进行覆盖取值的,然后后面定义的会覆盖前面定义的。

4.4.3  使用-P参数显示的激活一个profile

假设我们现在有如下定义的profiles

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <properties>
  5. <hello>world</hello>
  6. </properties>
  7. </profile>
  8. <profile>
  9. <id>profileTest2</id>
  10. <properties>
  11. <hello>andy</hello>
  12. </properties>
  13. </profile>
  14. <profiles>

那么当我们在进行Maven操作时就可以使用-P参数显示的指定当前激活的是哪一个profile了。比如我们需要在对项目进行打包的时候使用id为profileTest1的profile,我们就可以这样做:

  1. mvn package –P profileTest1

当我们使用activeByDefault或settings.xml中定义了处于激活的profile,但是当我们在进行某些操作的时候又不想它处于激活状态,这个时候我们可以这样做:

  1. Mvn package –P !profileTest1

这里假设profileTest1是在settings.xml中使用activeProfile标记的处于激活状态的profile,那么当我们使用“-P !profile”的时候就表示在当前操作中该profile将不处于激活状态。

4.4.4根据环境来激活profile

profile一个非常重要的特性就是它可以根据不同的环境来激活,比如说根据操作系统的不同激活不同的profile,也可以根据jdk版本的不同激活不同的profile,等等。

4.4.4.1根据jdk来激活profile

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <jdk>1.5</jdk>
  5. </profile>
  6. <profiles>

上面情况表示在jdk为1.5版本系列的时候激活profileTest1。

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <jdk>[1.4,1.7)</jdk>
  5. </profile>
  6. <profiles>

上面的情况表示在jdk为1.4、1.5和1.6的时候激活profileTest1。

4.4.4.2根据操作系统来激活profile

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <activation>
  5. <os>
  6. <name>Windows XP</name>
  7. <family>Windows</family>
  8. <arch>x86</arch>
  9. <version>5.1.2600</version>
  10. </os>
  11. </activation>
  12. </profile>
  13. </profiles>

上面的情况就是根据操作系统的类型来激活profileTest1。

4.4.4.3根据系统属性来激活profile

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <activation>
  5. <property>
  6. <name>hello</name>
  7. <value>world</value>
  8. </property>
  9. </activation>
  10. </profile>
  11. </profiles>

上面的profileTest1将在提供了系统属性hello,并且其值为world的时候激活。下面的做法可以激活profileTest1。

  1. mvn package –Dhello=world

当是下面的这种定义形式时,profileTest1将在指定了系统属性hello,且其值为任意值的时候被激活。

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <activation>
  5. <property>
  6. <name>hello</name>
  7. </property>
  8. </activation>
  9. </profile>
  10. </profiles>

4.4.4.4根据文件是否存在激活profile

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <activation>
  5. <file>
  6. <exists>target</exists>
  7. </file>
  8. </activation>
  9. </profile>
  10. </profiles>

上面的定义表示当存在target文件时激活profileTest1。

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <activation>
  5. <file>
  6. <missing>target</missing>
  7. </file>
  8. </activation>
  9. </profile>
  10. </profiles>

上面的定义表示当不存在target文件时激活profileTest1。

4.5     查看当前处于激活状态的profile

我们可以同时定义多个profile,那么在建立项目的过程中,到底激活的是哪一个profile呢?Maven为我们提供了一个指令可以查看当前处于激活状态的profile都有哪些,这个指定就是mvn help:active-profiles。

现在假设我们的settings.xml文件中有如下profile的定义:

  1. <profiles>
  2. <profile>
  3. <id>profileTest1</id>
  4. <activation>
  5. <file>
  6. <missing>target</missing>
  7. </file>
  8. </activation>
  9. </profile>
  10. </profiles>
  11. <activeProfiles>
  12. <activeProfile>profileTest1</activeProfile>
  13. </activeProfiles>

这个时候我们可以看到,我们已经定义了profileTest1始终为激活状态,这个时候我们使用mvn help:active-profiles查看处于激活状态的profile时,就会打印出如下内容:

How to activate maven profile inside eclipse

Normally maven is use for project dependency management and lifecycle, so there are several developers working on it. Each has its own development environment either in windows, linux or mac. To do this we create several profiles for each developer in pom.xml.

 <profiles>
<profile>
<id>windows</id>
<properties>
<jboss.home>C:/manaty/jboss-4.2.3.GA</jboss.home>
</properties>
</profile>
<profile>
<id>linux</id>
<properties>
<jboss.home>/home/project/jboss-4.2.3.GA</jboss.home>
</properties>
</profile>
</profiles>

And then invoke mvn with the -P argument. Example:

mvn install -Pwindows
mvn install -Plinux

How could we do the same inside eclipse. There are 2 ways: 1.) Right click on the project->click properties->select maven menu


 

If in case maven is not present, right click on project->Maven->Enable Maven Dependency 2.) Right click on project->Run As->Run Configurations->Maven Build->Add a new build (set profile and goal)

在eclipse激活maven profile配置的更多相关文章

  1. Eclipse中Maven的配置

    Maven 的配置 1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven 1.2 配置 Maven 的c ...

  2. Eclipse上Maven环境配置使用 (全)

    Eclipse上Maven环境配置使用 (全) 1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven. ...

  3. Java-Maven(四):Eclipse集成Maven环境配置

    一般maven都需要集成到IDE上使用的,而不是单独的使用,常见的maven可集成IDE:eclipse.IntelliJ IDEA.但这里就只学习eclipse集成maven的基础上,进行maven ...

  4. 在Eclipse上Maven环境配置使用

    1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven. Maven下载地址: http://maven. ...

  5. Maven:Eclipse上Maven的配置

    Eclipse上Maven的配置: 步骤: ①Maven下载地址: http://maven.apache.org/download.cgi# ②解压apache-maven-3.5.0-bin.zi ...

  6. Eclipse上Maven环境配置使用

    1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven. Maven下载地址: http://maven. ...

  7. 激活Maven profile的几种方式

    首先简单介绍下 Maven 的 profile 是什么.对于人来说,profile 是指人的肖像,轮廓,比如论坛里每个人注册了帐号后,可以设置自己的 profile,放上照片,介绍等等.对于 Mave ...

  8. Eclipse修改Maven仓库配置

    修改Apache-Maven\conf下的settings.xml文件 <?xml version="1.0" encoding="UTF-8"?> ...

  9. Eclipse下Maven插件配置

    要做一个基于C/S架构的汽车租赁系统,由于在实习期间接触过一些Java和SpringMVC,Spring,Hibernate的东西,所以决定使用这个框架组合来完成这个项目. 首先是Maven的配置,为 ...

随机推荐

  1. 【原创】GC/垃圾回收简介

    GC简介 1 GC机制 1.1 对象 从计算机的角度,装有数据的内存空间 1.2 作用 将内存垃圾的释放自动化 1.3 本质 将已经引用不到的对象视为死亡,将死亡的对象找出来并且作为垃圾进行回收 2 ...

  2. python爬虫抓取数据

    URL管理器实现方式:1. 内存python内存待爬取URL集合:set()已爬取URL集合:set() 2. 关系数据库MySQLurls(url, is_crawled) 3. 缓存数据库(高性能 ...

  3. 使pre的内容自动换行

    <pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见应用就是用来表示计算机的源代码 ...

  4. .bash_profile和.bashrc的区别

    参考资料: http://blog.163.com/wang_hai_fei/blog/static/309020312008728333912/

  5. spring加载properties配置文件

    public static void main(String[] args){    String path="E:/workspace/bocMarketData/src/config/P ...

  6. php-mysql 问题笔记一——在命令行中可以执行的sql语句,无法从php页面页面执行!

    我的情况: 1.由于外键较多,插入数据时,提前关闭外键(SET FOREIGN_KEY_CHECKS=0). 2.所使用的sql语句中,有外键绑定到其他表中,所以无法从php页面插入. 原因分析: S ...

  7. javascript函数作用域及this指向详解

    一.先说一个简单的概念--变量提升: 通过function+函数名的方式,声明的函数,可以在代码中的任何位置调用: 通过var定义变量的方式,声明的函数,则必须在声明之后进行调用,原因就是在变量定义之 ...

  8. [ACdream]小晴天老师系列——竖式乘

    题目链接:http://acdream.info/contest?cid=1269#problem-C Problem Description 小晴天是ACdream团队中最牛的老师之一,他最擅长数学 ...

  9. 备忘:MySQL中修改表中某列的数据类型、删除外键约束

    -- MySQL中修改表中某列的数据类型 ALTER TABLE [COLUMN] 表名 MODIFY 列名 列定义; -- 删除外键约束 SHOW CREATE TABLE 表名; -- 复制CON ...

  10. 深入理解AMQP协议转载

    转自https://blog.csdn.net/weixin_37641832/article/details/83270778 文章目录 一.AMQP 是什么二.AMQP模型工作过程深入理解三.Ex ...