博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven提高篇系列之(四)——使用Profile
阅读量:6684 次
发布时间:2019-06-25

本文共 4582 字,大约阅读时间需要 15 分钟。

 

这是一个Maven提高篇的系列,包含有以下文章:

 

   

 

 

在开发项目时,设想有以下场景:

  1. 你的Maven项目存放在一个远程代码库中(比如github),该项目需要访问数据库,你有两台电脑,一台是Linux,一台是Mac OS X,你希望在两台电脑上都能做项目开发。但是,安装Linux的电脑上安装的是MySQL数据库,而Mac OS X的电脑安装的是PostgreSQL数据库。此时你需要找到一种简单的方法在两种数据库连接中进行切换,你会怎么做?

  2. 此外,你的项目需要部署。为了调试,在开发时我们在Java编译结果中加入了调试信息(Java默认)。而在部署时你希望Java编译结果中不出现调试信息。此时你又会怎么做?

 

答案是Profile。Maven的Profile用于在不同的环境下应用不同的配置。一套配置即称为一个Profile。这里的“环境”可以是操作系统版本,JDK版本或某些文件是否存在这样的物理环境,也可以是你自己定义的一套逻辑环境。比如上面的A中所说的Linux和Mac OS X便是一种物理环境,而B中讲的开发环境和部署环境则为逻辑环境。Maven提供了Activation机制来激活某个Profile,它既允许自动激活(即在某些条件满足时自动使某个Profile生效),也可以手动激活。

 

一个Profile几乎可以包含所有能够出现在pom.xml中的配置项,比如<artifactId>,<outputDirectory>等。相当于在Profile中定义的配置信息会覆盖原有pom.xml中的相应配置项。

 

(一)定义Profile

一般来说,我们将Profile的定义放在pom.xml文件的最后:

 

apple
true
APPLE
banana
BANANA

 

 

在上面的配置中,我们定义了两个Profile,一个id为apple,该Profile将fruit属性设置为APPLE,另一个id为banana,它将fruit属性设置为BANANA。此外,第一个Profile还配置了“<activeByDefault>true</activeByDefault>”,表明该Profile默认即是生效的。

 

为了打印出fruit这个属性,我们再向pom.xml中添加一个maven-antrun-plugin插件,我们可以通过该插件的echo任务来打印属性信息。我们将该打印配置在Maven的initialize阶段(任何阶段都可以):

 

maven-antrun-plugin
initialize
run
Fruit:${fruit}

 

 

配置完成之后,执行:“mvn initialize”,由于id为apple的Profile默认生效,此时将在终端输出“APPLE”字样:

 

......[INFO] Executing tasks    [echo] Fruit:APPLE[INFO] Executed tasks......

 

 

如果要使用id为banana的Profile,我们可以显式地指定使用该Profile:"mvn initialize -Pbanana":

 

......[INFO] Executing tasks    [echo] Fruit:BANANA[INFO] Executed tasks......

 

  

(二)手动激活Profile

事实上,在上面的例子中,我们在显示“BANANA”时便使用了手动激活Profile的方式。手动激活Profile要求我们在运行mvn命令时通过“-PprofileId”的方式指定使用某个Profile。比如,对于上文提到的B点,我们可以通过一下配置完成:

 

production
org.apache.maven.plugins
maven-compiler-plugin
false

 

 

在开发时,我们使用“mvn clean install”,此时名为production的Profile并没有被激活,所以还是采用Java编译默认的配置(即在结果中包含了调试信息)。当需要为生产部署环境编译时,便可以使用“mvn clean install -Pproduction”。

 

本人认为,Maven的Profile机制最大的好处在于它的自动激活性(请参考下文),因为如果手动激活,在运行mvn命令时我们依然需要告诉Maven一些信息(即这里的“-PprofileId”)来完成配置,我们完全可以通过另外的方法来达到相同的目的。比如,我们可以定义一个父pom和两个子pom(比如pom.xml和pomB.xml),在父pom中我们存放两个子pom共享的配置(比如上面的maven-antrun-plugin),而在两个子pom中分别配置不同的信息以代表不同的环境,比如在pom.xml中(默认执行的pom),我们将fruit属性设置成APPLE,而在pomB.xml中,将fruit属性设置成BANANA。此时,pom.xml和pomB.xml都继承自父pom。虽然在默认情况下Maven会将名为“pom.xml”的文件作为输入文件,但是我们通过“-f”参数来指定其他pom文件。比如,如果我们要显示“APPLE”,我们可以直接执行“mvn initialize”,如果要显示“BANANA”,则可以执行“mvn initialize -f pomB.xml”。

 

(三)自动激活Profile

在自动激活Profile中,我们需要为某个Profile预先定义一些前提条件(比如操作系统版本),当这些前提条件满足时,该Profile将被自动激活。比如,对于上文中的A点,我们可以为Mac OS X和Linux(Unix)分别定义一套数据库连接:

 

mac
false
mac
org.postgresql.Driver
jdbc:postgresql://localhost/database
username
password
unix
false
unix
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/database
username
password

 

 

请注意,以上两个Profile在默认情况下都没有被激活,Maven在运行时会检查操作系统,如果操作系统为Mac OS X,那么Maven将自动激活id为mac的Profile,此时将使用PostgreSQL的数据库链接,如果操作系统为Linux或Unix,那么将使用MySQL数据库连接。更多的Profile自动激活条件,请参考。

 

在文章中,我们将讲到如何处理依赖冲突。

转载地址:http://syaao.baihongyu.com/

你可能感兴趣的文章
ppt免费模板下载
查看>>
有关字符串中的函数及其部分面试题
查看>>
试用分区助手心得
查看>>
IP地址被恶意域名解析
查看>>
完美安装centos7编译安装php5.6.40(亲测成功!)
查看>>
CentOS7基于虚拟用户的vsfptd
查看>>
[1]supervisor的使用管理:实现对异常中断的子进程的自动重启(以tomcat为例)
查看>>
关于配置Radius认证服务器的思路与配置方法
查看>>
一张表格让编程语言的选择不再迷茫无措
查看>>
CentOS7.5中安装openoffice
查看>>
马哥运维班第四周作业
查看>>
已解决:无法连接到WMI提供程序。你没有权限或者该服务器无访问···
查看>>
Linux -- logrotate 切割 Nginx
查看>>
Eclipse上安装GIT插件EGit及使用
查看>>
SUSE安装SSH
查看>>
swt定时器的实现 .
查看>>
exchange2010赋予普通用户新建和删除邮箱的权限
查看>>
CRS-0215: Could not start resource 'ora.DB.DB2.inst'
查看>>
图片里的英语
查看>>
iscsi客户端配置
查看>>