Mavenprofile配置管理及激活profile的⼏种⽅式(⾮常⾮常详
细)
⽬录
前沿:
为了实现不同环境构建的不同需求,这⾥使⽤到了 profile。因为 profile 能够在构建时修改 pom 的⼀个⼦集,或者添加额外的配置元素。下⾯是两个场景例⼦
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⽣效),也可以⼿动激活。
springboot的profile配置如果不熟悉可以参考下⾯的⽂章:
针对不同环境的 profile 的配置
为了体现不同环境的不同构建,需要配置好不同环境的 profile,代码如下:
<profiles>
<profile>
<id>dev_evn</id>
<properties>
<db.driver&sql.jdbc.Driver</db.driver>
<db.url>jdbc:mysql://localhost:3306/test</db.url>
<db.urname>root</db.urname>
<db.password>root</db.password>
</properties>
</profile>
<profile>
<id>test_evn</id>
<properties>
<db.driver&sql.jdbc.Driver</db.driver>
<db.url>jdbc:mysql://localhost:3306/test_db</db.url>
<db.urname>root</db.urname>
<db.password>root</db.password>
</properties>
</profile>
kingj</profiles>
在两个不同的 profile 中,配置了同样的属性,不⼀样的值。按照前⾯的介绍,在开发时可以⽤ mvn 命令后⾯添加“-Pdev_evn”激
活“dev_evn profile”。
激活 profile 配置⽅式
在 Maven 中,可以选⽤如下的⽅式激活 profile。
1. 命令⾏激活
⽤户可以在 mvn 命令⾏中添加参数“-P”,指定要激活的 profile 的 id。如果⼀次要激活多个 profile,可以⽤逗号分开⼀起激活。例如:
mvn clean install -Pdev_env,test_evn
这个命令就同时激活了 id 为“dev_evn”和“test_evn”的两个 profile。
首例艾滋病被治愈2. Settings ⽂件显⽰激活
如果希望某个 profile 默认⼀直处于激活状态,可以在 l 中配置 activeProfiles 元素,指定某个 profile 为默认激活状态,样例配置代码如下:
<ttings>
...
<activeProfiles>
superwomen
<activeProfile>dev_evn</activeProfile>
</activeProfiles>
...
</ttings>
3. 系统属性激活
可以配置当某个系统属性存在时激活 profile,代码如下:
<profiles>
推荐个成人网站
<profile>
...
<activation>
hm啥意思<property>
<name>profileProperty</name>
</property>
</activation>
</profile>
</profiles>
甚⾄还可以进⼀步配置某个属性的值是什么时候激活,例如:
<profiles>
<profile>
中译日...
<activation>
<property>
<name>profileProperty</name>
<value>dev</value>
</property>
</activation>
</profile>
</profiles>
这样就可以在 mvn 中⽤“-D”参数来指定激活,例如:
Mvn clean install -DprofileProperty=dev
表⽰激活属性名称为 profileProperty,值为 dev 的 profile。
实际上这也是⼀种命令激活 profile 的⽅法,只是⽤的是“-D”参数指定激活的属性和值,⽽前⾯的是⽤的“-P”参数指定激活的 profile 的 id ⽽已。
dlna4. 操作系统环境激活
⽤户可以通过配置指定不同操作系统的信息,实现不同操作系统做不同的构建。例如:
<profiles>
<profile>
<activation>
<os>
<name>Window XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>会计从业资格证成绩
</profile>
</profiles>
family 的值是 Windows、UNIX 或 Mac。name 为操作系统名称。arch为操作系统的架构。version为操作系统的版本。具体的值可以通过查看环境中的系统属性“os.name”“os.arch”和“os.version”获取。
5. ⽂件存在与否激活
当然,也可以通过配置判断某个⽂件存在与否来决定是否激活 profile,样例配置代码如下:
<profiles>
<profile>
<activation>
<file>
<missing>t1.properties</missing>
<exists>t2.properties</exists>
</file>
</activation>
</profile>
</profiles>
6. 默认激活
最后,还可以配置⼀个默认的激活 profile,例如:
<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
需要注意的是,如果 pom 中有任何⼀个 profile 通过其他⽅式被激活的话,所有配置成默认激活的 profile 都会⾃动失效。 可以使⽤如下命令查看当前激活的 profile。
Mvn help:active-profiles
也可以使⽤如下命令查看所有的 profile。
Mvn help:all-profiles
idea中可以通过点击按钮实现不童环境的切换(开始进⼊⼯作的时候,没有使⽤过maven的profile)感到⾮常的陌⽣,什么都不知道啊。。。。。
点钩,这些环境是互斥的,想要什么环境只要选中即可。
profile种类
前⾯介绍了 profile 的意义和激活⽅式。那么在 Maven 中,有哪些 profile?如何配置呢?
根据 profile 配置的位置不同,可以将 profile 分成如下⼏种。
1)l
2)⽤户 l
在⽤户⽬录下的“.l”中的 profile,对本机上的该⽤户的所有 Maven 项⽬有效。
3)全局 l
在 Maven 安装⽬录下 l 中配置的 profile,对本机上所有项⽬都有效。
为了不影响其他⽤户且⽅便升级 Maven,⼀般配置⾃⼰的 l,不要轻易修改全局的 l。同样的道理,⼀般不需要修改全局 l 中的 profile。
不同类型的 profile 中可以声明的 pom 元素是不⼀样的,l 中的 profile 能够随同 l ⼀起提交到代码仓库中,被 Maven 安装到本地仓库⾥⾯,并且能被部署到远程 Maven 仓库中。也就是说,可以保证 profile 伴随特定的 l ⼀起存在。所以它可以修改或者添加很多 pom 元素,例如:
<project>
<repositories></repositories>
disgraced
<pluginRepositories></pluginRepositories>
<dependencies></dependencies>
<dependencyManagement></dependencyManagement>
<modules></modules>
<properties></properties>
<reporting></reporting>
<build>
<plugins></plugins>
<defaultGoal></defaultGoal>
<resources></resources>
<testResources></testResources>
<finalName></finalName>
</build>
</project>
如上代码所⽰,在 pom 中的 profile 元素⽐较多,可以添加或修改插件配置、项⽬资源⽬录、测试资源⽬录配置和项⽬构建的默认名称等。
除了 pom 中的 profile 外,其他外部的 profile 可以配置的元素相对就少些,因为那些外部 profile ⽆法保证同项⽬中的 l ⼀起发布。
如果在外部 profile 中配置了项⽬依赖,开发⽤户可以在本地编译,但是因为依赖配置没有随同 l ⼀起发布部署到仓库中,别的⽤户下载了该项⽬后,就会因为缺少依赖⽽失败。
为了避免这样的不⼀致情况,很多在 pom 的 profile 可以出现的元素不允许在外部 profile 中出现。
在外部 profile 可以声明的元素如下:
<project>
<repositories></repositories>
carefully<pluginRepositories></pluginRepositories>
<properties></properties>
</project>
这些外部 profile 元素不⾜以影响项⽬的正常构建,只会影响项⽬的仓库和 Maven 属性。
参考博客: