`

Maven简介—profile介绍(经典的文章值得一看)

阅读更多
4       profile介绍

4.1     profile简介

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

先看下面一个配置
Xml代码 
<profiles> 
        <profile> 
             <id>profileTest1</id> 
             <properties> 
                    <hello>world</hello> 
             </properties> 
             <activation> 
                    <activeByDefault>true</activeByDefault> 
             </activation> 
        </profile> 
         
        <profile> 
             <id>profileTest2</id> 
             <properties> 
                    <hello>andy</hello> 
             </properties> 
        </profile> 
</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
Xml代码 
<profiles> 
       <profile> 
            <id>profileTest1</id> 
            <properties> 
                   <hello>world</hello> 
            </properties> 
       </profile> 
        
       <profile> 
            <id>profileTest2</id> 
            <properties> 
                   <hello>andy</hello> 
            </properties> 
       </profile> 
</profiles> 

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

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

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

假设我们现在有如下定义的profiles
Xml代码 
<profiles> 
       <profile> 
              <id>profileTest1</id> 
              <properties> 
                     <hello>world</hello> 
              </properties> 
       </profile> 
       <profile> 
              <id>profileTest2</id> 
              <properties> 
                     <hello>andy</hello> 
              </properties> 
       </profile> 
<profiles> 

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

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

Xml代码 
<profiles> 
       <profile> 
              <id>profileTest1</id> 
              <jdk>1.5</jdk> 
       </profile> 
<profiles> 

       上面情况表示在jdk为1.5版本系列的时候激活profileTest1。
Xml代码 
<profiles> 
       <profile> 
              <id>profileTest1</id> 
              <jdk>[1.4,1.7)</jdk> 
       </profile> 
<profiles> 

       上面的情况表示在jdk为1.4、1.5和1.6的时候激活profileTest1。
4.4.4.2根据操作系统来激活profile

Xml代码 
<profiles> 
       <profile> 
            <id>profileTest1</id> 
            <activation> 
              <os> 
                   <name>Windows XP</name> 
                   <family>Windows</family> 
                   <arch>x86</arch> 
                   <version>5.1.2600</version> 
              </os> 
            </activation> 
       </profile> 
</profiles> 

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

Xml代码 
<profiles> 
       <profile> 
            <id>profileTest1</id> 
            <activation> 
              <property> 
                   <name>hello</name> 
                   <value>world</value> 
              </property> 
            </activation> 
       </profile> 
</profiles> 

上面的profileTest1将在提供了系统属性hello,并且其值为world的时候激活。下面的做法可以激活profileTest1。
Cmd代码 
mvn package –Dhello=world 

       当是下面的这种定义形式时,profileTest1将在指定了系统属性hello,且其值为任意值的时候被激活。
Xml代码 
<profiles> 
       <profile> 
            <id>profileTest1</id> 
            <activation> 
              <property> 
                   <name>hello</name> 
              </property> 
            </activation> 
       </profile> 
</profiles> 

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

Xml代码 
<profiles> 
       <profile> 
            <id>profileTest1</id> 
            <activation> 
              <file> 
                   <exists>target</exists> 
              </file> 
            </activation> 
       </profile> 
</profiles> 

上面的定义表示当存在target文件时激活profileTest1。
Xml代码 
<profiles> 
       <profile> 
            <id>profileTest1</id> 
            <activation> 
              <file> 
                   <missing>target</missing> 
              </file> 
            </activation> 
       </profile> 
</profiles> 

       上面的定义表示当不存在target文件时激活profileTest1。
分享到:
评论

相关推荐

    maven profile多环境配置

    Maven Profile 多环境配置 Maven 是一个流行的项目管理工具,广泛应用于 JAVA 相关的项目中。为了实现多环境的构建可移植性,Maven 提供了 Profile 机制。通过不同的环境激活不同的 Profile,可以达到构建的可移植...

    maven-profile-2.0.6.jar

    maven-profile-2.0.6.jar!!!

    使用maven Profile实现多环境构建

    Maven Profile是Maven中的一种机制,允许开发者定义一组可选的配置,这些配置可以在特定条件下被激活。每个Profile包含了一组插件、依赖和配置属性,可以用于定制项目的构建过程。Profile通常定义在`pom.xml`文件的`...

    maven-profile-2.0.jar

    maven项目转换为eclipse项目,可能缺少的包。

    maven利用Profile构建不同环境的部署包

    Maven作为Java项目管理工具,提供了一种强大的特性——Profile,来帮助开发者根据环境条件构建不同的部署包。这篇博客将详细解释如何利用Maven的Profile功能实现这一目标。 首先,我们需要理解Maven Profile的概念...

    maven-profile-2.1.0.jar

    maven-profile-2.1.0.jar

    maven-profile-2.0.2.jar

    maven-profile-2.0.2.jar

    maven-profile-2.0.1.jar

    maven-profile-2.0.1.jar

    1Maven简介

    在博文《Maven简介》中,作者深入浅出地介绍了Maven的基本概念和工作原理。Maven不仅仅是一个编译器,它更是一个强大的依赖管理系统,可以自动下载项目所需的库文件,解决了开发者在管理众多jar包时的困扰。通过在...

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过使用一个统一的构建过程,简化了项目的构建、依赖管理以及文档生成等任务。Maven 3.5.2是Maven的一个稳定版本,包含了众多优化和改进,提升了...

    maven中文指导 学maven的很好一本参考书

    《Maven中文指导》是一本专为学习Maven的中文读者量身打造的参考书籍,旨在帮助那些在英语资源中感到困扰的朋友更好地理解和掌握Maven这一强大的项目管理和构建工具。Maven通过自动化构建过程,使得Java项目的构建、...

    maven3.6的安装包

    在 `.bashrc` 或 `.bash_profile` 文件中,添加一行 `export PATH=$PATH:$MAVEN_HOME/bin`。 **五、验证安装** 完成以上步骤后,重启命令行终端(或在Windows上打开新的命令提示符窗口),输入 `mvn -version`,...

    maven安装maven安装maven安装maven安装maven安装

    maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装...

    一个基于maven 和 spring 的经典项目,快速启动,可以作为maven模板使用

    一个基于maven 和 spring 的经典项目,快速启动,可以作为maven模板使用。适用人群:计算机,软件工程、人工智能,网络安全,电子信息等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 一个...

    Maven 中文介绍

    ### Maven 中文介绍 #### Maven 是什么? Maven 是 Apache Maven 项目的一部分,它是一种用于 Java 项目的构建和管理工具。Maven 不仅仅是一个构建工具,更确切地说,它是一套项目管理和理解工具。Maven 提供了一...

    maven相关工具介绍

    Maven的全面介绍可能涵盖了其基本概念、安装步骤、环境配置、POM编写、命令行使用、生命周期理解、依赖管理策略(如第一性依赖、排除依赖等),以及如何利用Maven插件扩展功能。此外,还可能涉及Maven Archetypes...

    maven 环境搭建总结

    #### 一、Maven简介 Maven是Apache下的一个开源项目,它是一种项目管理和理解工具。通过一个中心信息管理的方式,Maven能够管理项目的构建、报告和文档。Maven使用描述性的XML文件来管理项目的构建、依赖关系和其他...

    Maven心得,简单介绍maven。

    首先,让我们来看看 Maven 相较于 Ant 的优势。Ant 是一个早期的构建工具,没有严格的约定,需要开发者明确指定项目结构和构建步骤。而 Maven 引入了约定,规定了标准的项目目录结构,如 `src/main/java` 用于存放源...

    maven学习指南java(经典,实例)

    Apache Maven是一个开源的项目管理和综合工具,主要服务于Java项目。Maven采用项目对象模型(POM)的概念,可以实现项目的构建、报告以及文档的统一管理。Maven不仅限于Java,也支持其他编程语言。本教程旨在为初学...

    maven教程-maven教程-maven教程

    通过本文的介绍,我们可以了解到Maven的基本概念、安装配置、基本使用和深入应用详解。 Maven的基本概念包括POM(Project Object Model,项目对象模型)、标准集合(archetype)、项目生命周期和依赖管理系统。POM...

Global site tag (gtag.js) - Google Analytics