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** Profiles允许根据不同的环境配置项目。例如,你可以为开发、测试和生产环境创建不同的配置,包含不同的依赖和插件设置。 **9. Maven的聚合与继承** Maven支持项目聚合(aggregation)和继承...
- Maven的profiles允许根据不同的环境或需求配置不同的构建行为,如开发、测试和生产环境的配置差异。 10. **Maven Archetypes** - Maven Archetypes是预定义的项目模板,可以帮助用户快速创建新项目,只需提供...
9. ** profiles**:Maven的profile功能允许根据不同的环境或条件选择不同的构建配置。 10. **命令行接口(CLI)**:用户可以通过命令行工具`mvn`执行Maven的各种操作,如`mvn clean install`来清理项目、编译源码并...
7. ** profiles**:Maven的配置可以基于不同的环境(如开发、测试、生产)进行定制,通过profiles实现不同环境下的差异化构建。 8. **版本管理**:Maven支持使用SNAPSHOT版本号,用于跟踪开发中的软件版本。当仓库...
7. ** Profiles(配置文件)**:Maven 提供了Profiles机制,可以根据不同的环境或条件启用或禁用特定的配置。 8. **聚合和继承**:Maven 允许项目聚合(aggregation)和继承(inheritance),这样可以在多个项目间...
1. profile:Maven支持多环境配置,通过<profiles>标签定义不同的环境变量和构建行为。 2. settings.xml:个人的Maven配置文件,包括仓库地址、镜像设置、用户属性等,可以覆盖全局配置。 六、总结 maven-...
4. **使用Maven Profiles**:针对不同环境(如开发、测试、生产)定义不同的配置。 通过深入学习和使用"Maven 3.6.0",开发者可以更好地管理和构建Java项目,实现标准化开发流程,提高团队协作效率。
此外,还可以通过`<mirrors>`元素设置镜像以提高下载速度,通过`<profiles>`元素定义不同环境的配置。 Maven使用一种约定优于配置(Convention over Configuration)的原则,这意味着它有一套默认的构建规则。例如...
9. **Maven profiles**:Maven配置可以通过profiles来区分不同的环境,如开发、测试和生产环境。根据不同的profile,Maven可以使用不同的配置,例如使用不同的数据库连接或打包方式。 10. **Maven的依赖管理**:...
3. **安全实践**:避免在`pom.xml`中直接写入敏感的数据库连接信息,可以使用Maven的 profiles 或者环境变量来存储。 总之,Maven DB Plugin是Java开发中一个实用的工具,它简化了与数据库交互的构建过程,提高了...
- 通过 profiles 功能,可以为不同的环境(如开发、测试、生产)配置不同的属性和依赖。 - 在POM中定义插件配置,可以自定义构建过程。 - 使用Maven Archetypes创建项目模板,快速初始化新项目。 总结来说,...
5. **全局配置**:`settings.xml`还允许你配置全局的Maven属性,如`<profiles>`用于定义不同环境的配置,`<servers>`用于管理认证信息,如部署到私有仓库时所需的用户名和密码。 6. **插件配置**:Maven通过插件...
9. ** profiles**:Profile是Maven中的一种条件配置,可以根据不同的环境(如开发、测试、生产)或需求来切换不同的配置。 10. **命令行接口**:Maven提供了命令行界面,用户可以通过简单的命令如`mvn clean ...
8. ** profiles**:Maven的profiles允许根据不同的环境或需求配置不同的构建设置,如开发、测试和生产环境的配置。 9. **站点生成**:Maven可以自动生成项目的文档站点,包括项目信息、报告、源码和API文档,这极大...
- **Maven profiles**:掌握配置文件中的profile概念,用于在不同环境下调整构建行为。 - **Maven的继承和聚合**:学习如何通过多模块项目结构来组织和管理大型项目。 - **Maven的模型元数据**:分析POM的元数据,...
9. **Maven profiles**:允许为不同环境或构建目标定义配置,通过激活profile来改变构建行为。 10. **Maven命令行界面**:提供了丰富的命令行选项,如`mvn clean`用于清理项目,`mvn install`用于安装项目到本地...
9. **profiles**:Maven的profiles机制允许根据不同的环境(如开发、测试、生产)切换配置,方便部署。 10. **编码规范与质量检查**:Maven可以通过插件如Checkstyle、PMD等,帮助开发者遵循编码规范,提高代码质量...
4. **支持Maven profiles**:可以方便地在Eclipse中切换和激活不同的Maven profile。 5. **支持Maven插件**:允许你在Eclipse中直接运行Maven插件的目标。 6. **WTP集成**:如果你在进行Web项目开发,Maven ...
2. 使用Maven Profiles适应不同的构建环境。 3. 定期更新Maven,以获取最新的特性、修复和安全更新。 总的来说,Apache Maven 3.6.3是一个强大且广泛使用的工具,它简化了Java开发的构建流程,提高了开发效率,使得...