Profiles
是
maven
的一个很关键的术语:
profile
是用来定义一些在
build lifecycle
中使用的
environmental variations
,
profile
可以设置成在不同的环境下激活不同的
profile
(例如:不同的
OS
激活不同的
profile
,不同的
JVM
激活不同的
profile
,不同的
dabase
激活不同的
profile
等等)。
定义
Profiles
你可以把
profiles
定义在
4
个地方:
-
%M2_HOME%/conf/settings.xml
,这是针对该部电脑的所有
user
的
profiles
,是
global profiles
,它会影响所有的
maven project build
-
<your -home-directory>/.m2/settings.xml
,这是针对
per user
的
profiles
,是
user
级的
profiles
,它会影响当前
user
的所有
maven project build
-
定义在
pom.xml
文件里面,这是仅针对该
project
的
profiles
,是
project
级的
profiles
-
profiles.xml
,它和
pom.xml
在同一个目录下,也是
project
级的
profiles
,使用
profiles.xml
的目的是希望把
profiles
的设置从
pom.xml
里抽离出来设置。
定义在这
4
个地方的
profiles
中,涉及范围越窄的
profiles
会覆盖范围越宽的
profiles
。
即:定义在
pom.xml
里
profiles
会覆盖
profiles.xml
的,
profiles.xml
的会覆盖
<your -home-directory>/.m2/settings.xml
的,
<your -home-directory>/.m2/settings.xml
的会覆盖
%M2_HOME%/conf/settings.xml
的。
不过请注意:设置在
pom.xml
里的
profiles
是最最推荐的,因为
pom.xml
会被
deploy
到
repository
里,所以
pom.xml
里的
profiles
才会
available for subsequent builds originating from the repository or as transitive dependencies
。而
settings.xml
和
profiles.xml
里定义的
profiles
不会被
deploy
到
repository
,则有诸多限制,因此,只有下面几个
profiles
能够在
settings.xml
和
profiles.xml
里定义:
-
repositories
-
pluginRepositories
-
properties
其他类型的
profiles
必须在
pom.xml
里定义(上面
3
个
profiles
也可以在
pom.xml
里定义)。
Pom.xml
能够定义的
profiles
包括:
-
<repositories>
-
<pluginRepositories>
-
<dependencies>
-
<plugins>
-
<properties>
(not actually available in the main POM, but used behind the scenes)
-
<modules>
-
<reporting>
-
<dependencyManagement>
-
<distributionManagement>
-
a subset of the <build>
element, which consists of:
-
<defaultGoal>
-
<resources>
-
<testResources>
-
<finalName>
激活
Profiles
激活
profiles
有下列几种方式:
-
Explicitly
-
Through Maven settings
-
Based on environment variables
-
OS settings
-
Present or missing files
1)
通过mvn命令的-P
参数来显示激活
profiles
,该参数值是
profile id list
(之间用逗号连接)
。如:
mvn groupId:artifactId:goal -P profileId-1,profileId-2
2)
通过在
settings.xml
里设置
<activeProfiles> element
来激活(当然
<profiles>
也必须在
settings.xml
里定义)
<settings>
...
<profiles>
<profile>
<id>profile1</id>
...
</profile>
</profiles>
<activeProfiles>
<activeProfile>profile-1</activeProfile>
</activeProfiles>
...
</settings>
列在<activeProfiles>里的profiles list会在每一个project执行时被激活
3)
Profiles还可以基于detect到的build environment 的state来自动激活,而不需要象上面2种方式显式激活。这只需要在profile定义时使用<activation> element。如:
<profiles>
<profile>
<activation>
<jdk>1.4</jdk>
</activation>
...
</profile>
</profiles>
上面的代码表示:如果
JDK version start with 1.4
(
eg. "1.4.0_08", "1.4.2_07", "1.4"
),该
profile
会被激活
<profiles>
<profile>
<activation>
<property>
<name>debug</name>
</property>
</activation>
...
</profile>
</profiles>
上面的代码表示:如果存在system propertie “debug”,该profile会被激活。为了激活它,输入的命令类似于:
mvn groupId:artifactId:goal –Ddebug
<profiles>
<profile>
<activation>
<property>
<name>environment</name>
<value>test</value>
</property>
</activation>
...
</profile>
</profiles>
上面的代码表示:如果存在system propertie “environment”的值为test,该profile会被激活。为了激活它,输入的命令类似于:
mvn groupId:artifactId:goal -Denvironment=test
4)
Profiles
还可以基于
OS setting
来自动激活
<profiles>
<profile>
<activation>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
...
</profile>
</profiles>
上面的代码表示:如果OS为windows xp,该profile会被激活
5)
根据某个
file
不存在而激活
profile
。例如下面定义的profile是在target/generated-sources/axistools/wsdl2java/org/apache/maven
不存在时激活
<profiles>
<profile>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/org/apache/maven</missing>
</file>
</activation>
...
</profile>
</profiles>
使用
Profiles
时要注意的
2
个问题
第一、
external properties
不是定义在pom.xml里的properties都称为external properties。举例说明最明了:
pom.xml
:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.myco.plugins</groupId>
<artifactId>spiffy-integrationTest-plugin</artifactId>
<version>1.0</version>
<configuration>
<appserverHome>${appserver.home}
</appserverHome>
</configuration>
</plugin>
...
</plugins>
</build>
...
</project>
~/.m2/settings.xml
<settings>
...
<profiles>
<profile>
<id>appserverConfig</id>
<properties>
<appserver.home>/path/to/appserver</appserver.home>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>appserverConfig</activeProfile>
</activeProfiles>
...
</settings>
当你执行该
pom
时,运行正常。但如果
another user
执行时,则运行失败,因为无法解析
${appserver.home}
(这是由于该
properties
是定义在
user
级别的
settings.xml
)。
解决方法
就是把该profile放到pom.xml里定义,但这样做的缺点是所有使用该
profile的pom.xml每个都要定义一次该profile。
最好的解决方法
是:Since Maven provides good support for project inheritance, it's possible to stick this sort of configuration in the pluginManagement
section of a team-level POM or similar, and simply inherit the paths
第二、
pom.xml
里定义的
profiles
不符合激活条件
依然是举个例子:
pom.xml
:
<project>
...
<profiles>
<profile>
<id>appserverConfig-dev
</id>
<activation>
<property>
<name>env</name>
<value>
dev
</value>
</property>
</activation>
<properties>
<appserver.home>/path/to/dev/appserver</appserver.home>
</properties>
</profile>
<profile>
<id>appserverConfig-dev-2
</id>
<activation>
<property>
<name>env</name>
<value>
dev-2
</value>
</property>
</activation>
<properties>
<appserver.home>/path/to/dev/appserver2</appserver.home>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.myco.plugins</groupId>
<artifactId>spiffy-integrationTest-plugin</artifactId>
<version>1.0</version>
<configuration>
<appserverHome>${appserver.home}
</appserverHome>
</configuration>
</plugin>
...
</plugins>
</build>
...
</project>
上面定义的pom.xml定义了两个profile:不同的”env”参数值会激活不同的profile。当执行命令:
mvn -Denv=dev-2
integration-test
就会激活profile “appserverConfig-dev-2
”
当执行命令:
mvn -Denv=dev
integration-test
就会激活profile “appserverConfig-dev
”
而当执行命令:
mvn -Denv=production
integration-test
则运行失败,因为没有激活任何一个profile,因此无法解析${appserver.home}。
查看
build time
过程中使用了哪些
Profiles
执行help plugin
的active-profiles goal
,使用命令:
mvn help:active-profiles
例子:
对于上面的例子,如果输入命令:
mvn help:active-profiles -Denv=dev
则输出的是:
The following profiles are active:
- appserverConfig-dev (source: pom)
如果有一个profile定义在settings.xml里并使用<activeProfile>激活,那么输入命令:
mvn help:active-profiles
则输出的是:
The following profiles are active:
- appserverConfig (source: settings.xml)
如果输入命令:
mvn help:active-profiles -P appserverConfig-dev
那么输出的是:
The following profiles are active:
- appserverConfig-dev (source: pom)
- appserverConfig (source: settings.xml)
分享到:
相关推荐
maven-profiles
* [MNG-4918] - MavenProject#clone() doubles active profiles * [MNG-4919] - Plugin execution contributed by lifecycle mapping gets lost when same goal is bound multiple times * [MNG-4923] - ...
profiles和maven assembly插件根据不同环境打包成tar.gz或者zip 将spring boot项目中的配置文件提取到外部config目录中 将spring boot项目中的启动jar包移动到boot目录中 将spring boot项目中的第三方依赖jar包移动...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
支持<servers> , <repositories> , <pluginRepositories> , 和<profiles> 。 输入项 servers 服务器的可选json数组,添加到settings.xml。 id-服务器的ID(不是登录用户的ID)与Maven尝试连接的存储库/镜像的...
y2p-maven-plugin说明该maven插件适用于spring boot微服务框架的目录结构,即YourProject src main java resources config application.yml application-dev.yml application-online.yml bootstrap.ymlMaven依赖...
Springboot Maven yaml 自动多环境打包工具 ...通过maven resources plugin把配置文件从src/main/resources/${profiles.active}拷贝到src/main/resources/ 然后打包 例如: mvn clean mvn package -P dev
当前案例中包含一整套的代码和word文档,非常适合新手... 主要是通过maven打包加载不同环境的properties文件 然后将对于的属性绑定到指定的实体对象中;然后通过调用接口可以看到加载不同环境控制台打印的内容是不一样的
1.maven打包的时候从配置中心把配置下载下来 2.修改本地的spring boot配置文件(一般是bootstrap.yml),禁用配置中心 第二步会替换如下配置: spring.cloud.config.enabled设为false 增加或替换spring.profiles.active...
Spring-Profiles-介绍来源属于博客: 拉动并运行: ! 确保 Maven 在您的路径上$ md spring-profiles $ cd spring-profiles $ git 初始化$ git remote add origin $ git pull origin master $ mvn clean compile ...
Task4Maven_TwoProfiles_Invoker 在这个项目中,我尝试调用 assembly:single 目标两次 - 使用“Profile1”和“Profile2”配置文件。 如果我只是调用 assembly:single goal with Profile1 或 Profile2 它工作正常。 ...
该项目包含一些使用Spoon来使Java项目的源代码多样化的处理器。 可用处理器 风扇处理器 该处理器随机添加一些“ Fantom”方法和调用。 fantom方法无济于事,它只是添加... <profiles> <id>diversify <plugins>
我不得不摆弄依赖项(你可以看到我去年的),不得不了解 maven-profiles 是如何工作的(从来没有第一手创建它们),主要是因为 Arquillian 没有对测试框架的同等支持,使用 JUnit 似乎比 TestNG 更稳定,但我真的很...
在maven中实现多环境的构建可移植性需要使用profile,通过不同的环境激活不同的profile来达到构建的可移植性。
sudo /opt/apache-maven-3.3.3/bin/mvn安装exec:java -Dscratch.host = 192.168.178.30 -Dspring.profiles.active = simulation sudo /opt/apache-maven-3.3.3/bin/mvn安装exec:java -Dscratch.host = 192.168....
Maven的profiles的使用例子
使用maven Profile实现多环境构建,详细请参考 :http://blog.csdn.net/u011781521/article/details/77899467
a NB project object model file, which is very userful to set up one maven project
通过Maven Profiles实现可移植性 11.2.1. 覆盖一个项目对象模型 11.3. 激活Profile 11.3.1. 激活配置 11.3.2. 通过属性缺失激活 11.4. 外部Profile 11.5. Settings Profile 11.5.1. 全局Settings ...
mvnwatcher Maven插件构建观察器 Maven插件,用于基于监视文件目录来监视和重新启动构建。... < profiles> < id>watch < groupId>com.dev9</ groupId> < artifactId>watcher-maven-plugin</ artifactId>