Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。有了profile,你就可以为不同的环境定制构建。profile可以在pom.xml中配置,并给定一个id。然后你就可以在运行Maven的时候使用的命令行标记告诉Maven运行特定profile中的目标。一个Profiles下面允许出现的元素:
复制代码
<project>
<profiles>
<profile>
<build>
<defaultGoal>...</defaultGoal>
<finalName>...</finalName>
<resources>...</resources>
<testResources>...</testResources>
<plugins>...</plugins>
</build>
<reporting>...</reporting>
<modules>...</modules>
<dependencies>...</dependencies>
<dependencyManagement>...</dependencyManagement>
<distributionManagement>...</distributionManagement>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<properties>...</properties>
</profile>
</profiles>
</project>
复制代码
一个Profile可以覆盖项目构件的最终名称,项目依赖,插件配置以影响构建行为,Profile还可以覆盖分发配置。maven提供了一种针对不同环境参数“激活”一个profile的方式,这就叫做profile激活。
profile简介
profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。比如说,我们可以通过profile定义在jdk1.5以上使用一套配置信息,在jdk1.5以下使用另外一套配置信息;或者有时候我们可以通过操作系统的不同来使用不同的配置信息,比如windows下是一套信息,linux下又是另外一套信息,等等。
profile的定义位置
我们可以有多个地方定义profile。定义的地方不同,它的作用范围也不同。
针对于特定项目的profile配置我们可以定义在该项目的pom.xml中。
针对于特定用户的profile配置,我们可以在用户的settings.xml文件中定义profile。该文件在用户家目录下的“.m2”目录下。
全局的profile配置。全局的profile是定义在Maven安装目录下的“conf/settings.xml”文件中的。
profile中能定义的信息
profile中能够定义的配置信息跟profile所处的位置是相关的。以下就分两种情况来讨论,一种是定义在settings.xml中,另一种是定义在pom.xml中。
profile定义在settings.xml中
当profile定义在settings.xml中时意味着该profile是全局的,它会对所有项目或者某一用户的所有项目都产生作用。因为它是全局的,所以在settings.xml中只能定义一些相对而言范围宽泛一点的配置信息,比如远程仓库等。而一些比较细致一点的需要根据项目的不同来定义的就需要定义在项目的pom.xml中。具体而言,能够定义在settings.xml中的信息有<repositories>、<pluginRepositories>和<properties>。定义在<properties>里面的键值对可以在pom.xml中使用。
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>
复制代码
profile的激活方式
Maven给我们提供了多种不同的profile激活方式。比如我们可以使用-P参数显示的激活一个profile,也可以根据环境条件的设置让它自动激活等。下面将对它们一一进行介绍:
使用activeByDefault设置激活
复制代码
<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将不会被激活。
在settings.xml中使用activeProfiles指定处于激活状态的profile
我们可以在settings.xml中使用activeProfiles来指定需要激活的profile,这种方式激活的profile将所有情况下都处于激活状态。比如现在我们定义了如下两个profile
复制代码
<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,具体定义如下:
<activeProfiles>
<activeProfile>profileTest1</activeProfile>
</activeProfiles>
考虑这样一种情况,我们在activeProfiles下同时定义了多个需要激活的profile。这里还拿上面的profile定义来举例,我们定义了同时激活profileTest1和profileTest2。
<activeProfiles>
<activeProfile>profileTest1</activeProfile>
<activeProfile>profileTest2</activeProfile>
</activeProfiles>
从profileTest1和profileTest2我们可以看出它们共同定义了属性hello。那么这个时候我在pom.xml中使用属性hello的时候,它到底取的哪个值呢?是根据activeProfile定义的顺序,后面的覆盖前面的吗?根据我的测试,答案是非也,它是根据profile定义的先后顺序来进行覆盖取值的,然后后面定义的会覆盖前面定义的。
使用-P参数显示的激活一个profile
我们在进行Maven操作时就可以使用-P参数显示的指定当前激活的是哪一个profile了。比如我们需要在对项目进行打包的时候使用id为profileTest1的profile,我们就可以这样做:
mvn package –P profileTest1
当我们使用activeByDefault或settings.xml中定义了处于激活的profile,但是当我们在进行某些操作的时候又不想它处于激活状态,这个时候我们可以这样做:
Mvn package –P !profileTest1
这里假设profileTest1是在settings.xml中使用activeProfile标记的处于激活状态的profile,那么当我们使用“-P !profile”的时候就表示在当前操作中该profile将不处于激活状态。
根据环境来激活profile
profile一个非常重要的特性就是它可以根据不同的环境来激活,比如说根据操作系统的不同激活不同的profile,也可以根据jdk版本的不同激活不同的profile,等等。
复制代码
<profiles>
<profile>
<id>profileTest1</id>
<jdk>1.5</jdk>
</profile>
<profiles>
复制代码
查看当前处于激活状态的profile
我们可以同时定义多个profile,那么在建立项目的过程中,到底激活的是哪一个profile呢?Maven为我们提供了一个指令可以查看当前处于激活状态的profile都有哪些,这个指定就是mvn help:active-profiles。
相关推荐
** Maven 安装与配置详解 ** Maven 是一个强大的项目管理和构建工具,主要用于Java应用程序的开发。由Apache软件基金会开发,它简化了构建过程,通过一个统一的配置方式管理项目的依赖关系,编译,测试,打包,部署...
Maven 管理 Spring Boot Profile 详解 Maven 管理 Spring Boot Profile 是一个重要的知识点,它可以帮助开发者更好地管理 Spring Boot 项目中的配置文件和依赖关系。在本文中,我们将详细探讨 Maven 管理 Spring ...
【Maven Eclipse Plugin详解】 Maven Eclipse Plugin是Apache Maven项目的一部分,它主要负责将Maven构建过程与Eclipse IDE集成,使得开发人员能够在Eclipse环境中方便地管理Java项目的依赖、构建以及生命周期。这...
**Spring IoC 框架详解** Spring框架是Java开发中的一个核心组件,它提供了许多功能,其中最重要的一项就是Inversion of Control(IoC),也称为Dependency Injection(DI)。IoC容器是Spring的核心,它负责管理...
** Maven 3.6.2 资源包详解与设置指南 ** Maven 是一个强大的 Java 项目管理工具,它极大地简化了构建、依赖管理和项目生命周期管理的过程。Maven 3.6.2 是一个稳定的版本,包含了多项优化和改进,旨在提高开发效率...
** Maven详解及环境变量配置指南 ** Maven是Java开发中的一个项目管理和综合工具,它极大地简化了构建、依赖管理以及项目的生命周期。本教程将详细讲解如何安装与配置Maven 3.8.4,包括环境变量的设置,旨在帮助...
** Maven 3.2.5 下载与使用详解** Maven是Apache软件基金会的一个开源项目,它是一款项目管理和综合工具,主要用于Java项目构建、依赖管理和项目信息管理。Maven通过使用一个标准化的项目对象模型(Project Object ...
Maven使用实战-从入门到精通实践【张振华.Jack】 ...不同开发环境的部署( profile ) 插件( compiler 、eclipse、 jar 、war、jetty)等 仓库( repository 、 distributionManagement ) 不存在的jar怎么办?
** Maven 插件压缩包详解 ** Maven 是一个强大的项目管理工具,广泛应用于Java开发领域,它通过一套规范化的构建过程,使得项目的构建、依赖管理和部署变得更加简单。Maven 插件是 Maven 生态系统的重要组成部分,...
** Maven 安装与仓库详解 ** Maven 是一个强大的 Java 项目管理工具,它简化了构建、依赖管理和项目生命周期的管理。对于 Java 开发者来说,Maven 是不可或缺的一部分,因为它能自动化构建过程,包括编译、测试、...
**Apache Maven 3.1.0 知识点详解** Apache Maven 是一个强大的项目管理和集成工具,主要用于构建、管理和组织Java项目。Maven 使用一种标准化的项目对象模型(Project Object Model,POM),通过配置文件简化项目...
** Maven本地仓库详解 ** Maven是Java项目管理和构建工具,它通过使用一个标准化的项目对象模型(Project Object Model,POM)来管理项目的构建、报告和依赖关系。Maven本地仓库是Maven在本机上存储下载的依赖库、...
### 安装Maven步骤详解 #### 一、前言 Apache Maven 是一款项目管理和构建工具,主要用于Java项目的构建和依赖管理。通过本指南,您将学会如何在Mac环境下完成Maven的安装与基本配置。 #### 二、准备工作 1. **...
** Maven学习笔记详解 ** Maven,作为Java项目管理和构建工具,是开发人员不可或缺的利器。它通过使用一种标准化的项目对象模型(Project Object Model,POM)来管理项目的依赖关系,构建过程以及配置信息。Maven...
### 知识点详解 #### 1. `-Dmaven.multiModuleProjectDirectory` 系统属性的作用 在 Maven 的构建过程中,`-Dmaven.multiModuleProjectDirectory` 是一个重要的系统属性,它用来指定多模块项目的根目录。当 Maven ...
### Maven命令参数详解 Maven是一款非常强大的Java项目管理工具,它可以帮助开发者自动化构建过程,管理项目的依赖关系等。为了更好地使用Maven,了解其命令行参数是非常必要的。以下是对给定文件中提及的一些关键...
### Maven的安装与配置详解 #### 一、Maven简介 Maven 是一款非常流行的 Java 项目管理和构建工具。通过 Maven,开发者可以自动化地完成项目的构建、依赖管理和生命周期管理等工作,极大地提高了开发效率。 #### ...
** Maven详解:构建Java项目的强大工具 ** Maven是一个基于项目对象模型(Project Object Model,POM)的概念,用于管理并构建Java项目。它通过提供一套标准的项目结构和自动化构建生命周期来简化软件开发过程。在...
### Linux下Maven环境安装与配置详解 #### 一、前言 在Linux环境中搭建Maven环境对于Java开发者来说是一项基本技能。Maven是Apache软件基金会支持的一个项目管理工具,它可以帮助开发者自动化构建过程,包括编译、...
** Maven下载安装与配置详解 ** Maven是一个Java项目管理和综合工具,它简化了构建、依赖管理和项目的生命周期。本文将详细介绍Maven的下载、安装以及配置过程,帮助开发者更好地理解和运用这一强大的工具。 ### ...