maven的pom.xml中配置的<profile>会替换掉原来对应的配置项。(执行maven命令是加 -P id 才会起作用)
比如如下的pom.xml配置文件:
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>gbss-trade-parent</artifactId> <groupId>com.infinitus.gbss.trade</groupId> <version>2.0.0-SNAPSHOT</version> <relativePath>../gbss-trade-parent/pom.xml</relativePath> </parent> <artifactId>gbss-trade-webapp</artifactId> <name>gbss-webapp Maven Webapp</name> <packaging>war</packaging> <properties> <maven.build.timestamp.format>yyMMdd-HHmm</maven.build.timestamp.format> <buildNumber>${maven.build.timestamp}</buildNumber> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <m.version>${project.version}-${buildNumber}</m.version> <!-- 执行mvn clean install -Ptest environment属性值会被替换成test --> <environment>local</environment> <warName>gbss-trade-${environment}</warName> </properties> <!-- profile定义 --> <profiles> <profile> <id>test</id> <properties> <environment>test</environment> </properties> </profile> </profiles> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <warName>${warName}</warName> <archive> <manifestEntries> <Manifest-Version>${m.version}</Manifest-Version> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build> </project>
上面的profile很好理解。profile中定义的environment属性会替换掉pom.xml原定义的environment属性。
(需要注意的是,这里的替换不会是将<properties>节点下的内容都替换掉,这也即是标题说的只会将根节点进行替换)
用<properties>来说可能不会特别直观,下面在<profiles>中定义一个插件来说事,而且在pom.xml的<build>下也定义这个插件,pom.xml的配置如下所示:
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>gbss-trade-dist</artifactId> <groupId>com.infinitus.gbss.trade</groupId> <version>2.0.0-SNAPSHOT</version> </parent> <artifactId>gbss-trade-webapp</artifactId> <packaging>war</packaging> <name>gbss-webapp Maven Webapp</name> <url>https://gbss.infinitus.com.cn/gbss-trade</url> <properties> <maven.build.timestamp.format>yyMMdd-HHmm</maven.build.timestamp.format> <buildNumber>${maven.build.timestamp}</buildNumber> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--environment 属性的值会被<profile>中的id=test中定义的属性替换掉--> <environment>local</environment> <finalName>gbss-trade-${local}</finalName> <m.version>${project.version}-${buildNumber}</m.version> </properties> <build> <plugins> <!-- 这里定义了一个war插件,但是只是配置了 warName跟archive信息,在profile中也定义了一个war插件,配置了webResources信息 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <warName>${finalName}</warName> <archive> <manifestEntries> <Manifest-Version>${m.version}</Manifest-Version> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>test</id> <properties> <environment>test</environment> </properties> <build> <plugins> <!-- profile中配置了一个war插件,这里只配置了webResources信息,如果pom.xml原配的war插件也配置了webResources信息,则会替换掉原来的,如果原来的war插件没有配置webResources信息,则会添加到war插件中去,即即相当于原配的war插件多了一个配置项信息,对于这个的理解,其实就跟spring中的<bean parent='parentBean' />的效果差不多 --> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <webResources> <resource> <filtering>true</filtering> <directory>src/main/deploy/test</directory> <includes> <include>WEB-INF/web.xml</include> </includes> </resource> </webResources> </configuration> </plugin> </plugins> </build> </profile> </profiles> </project>
具体的解释及要表达的内容都在上面xml代码的注释中了,至于对这段注释的理解,需要敲代码去验证,验证的依据无非就是看看原配的war插件的配置项跟profile中定义的war插件的配置项是否都起作用了,若起作用,说明我的理解是对的。(我已经验证过了,有兴趣的朋友可以尝试一下)。
相关推荐
在 POM 文件中,我们可以使用 `<profiles>` 元素来定义不同的 Profile。每个 Profile 都可以定义自己的配置文件,用于存储环境相关的配置信息。例如,我们可以定义一个开发环境的 Profile,如下所示: ```xml ...
通过`<build><resources>`节点下的`<filtering>`属性,我们可以指定哪些资源文件需要进行过滤。例如,我们可以为不同的环境定义不同的数据库连接字符串。 ```xml <build> <resources> <resource> <directory>...
在`<build>`节点中,我们需要配置Maven的资源过滤,以便在打包时选择正确的配置文件: ```xml <build> <resources> <!-- 配置文件过滤器 --> <resource> <directory>src/main/resources/env</directory> ...
本篇文章将详细探讨如何在Idea中配置Maven的profiles以实现test自动测试。 首先,让我们理解什么是Maven的profiles。Profiles是Maven配置的一个重要部分,它允许我们在一个项目中定义不同环境的配置,如开发、测试...
在软件开发过程中,特别是在企业级应用的构建中,往往需要针对不同的运行环境(如开发、测试、生产等)进行配置的差异化处理。Maven作为Java项目管理的强大工具,提供了Profile功能来解决这个问题。Profile允许我们...
在本节中,我们将详细讨论Maven多模块项目配置的实现方法。Maven多模块项目是指一个父模块包含多个子模块,每个子模块都是一个独立的Maven项目。这种结构可以使得项目的管理和维护变得更加方便。 父模块配置 在父...
在本案例中,我们将深入探讨如何使用`@Profile`注解以及结合Maven来实现多环境配置。 首先,`@Profile`注解用于标记一个类或方法,表示该类或方法只在指定的环境中生效。例如,我们可以为开发环境创建一个`...
1. **本地仓库(Local Repository)**: Maven默认将下载的依赖项存储在本地仓库中。在`settings.xml`里,你可以指定一个自定义的位置,例如: ```xml <localRepository>/path/to/your/local/repo</localRepository...
本文介绍了如何使用 SpringBoot 和 Maven 实现多环境配置文件夹解决方案,使用 Profile 功能来加载不同的配置文件,使用 Resources 和 Filter 来指定打包内容和替换变量,选择当前环境,加载对应的配置文件。
`<profiles>`中的配置可以通过`<activation>`标签自动激活,基于操作系统、JDK版本或其他属性: ```xml <profile> <id>linux</id> <activation> <os> <name>Linux</name> </os> </activation> ... </profile...
<id>nexus-profile</id> <repositories> <repository> <id>repo1</id> <url>http://repo1.maven.org/maven2</url> <snapshots><enabled>false</enabled></snapshots> </repository> <repository> <id>repo2...
每次构建时,Maven会根据激活的Profile替换资源文件中的占位符,生成适合目标环境的配置。这种方法既保持了代码库的整洁,又避免了手动修改配置文件的错误。 在实际应用中,还可以结合使用Maven的`assembly插件`或`...
1. **添加服务器ID**:在`settings.xml`的`servers`节点下,创建一个新的`server`节点,设置一个唯一的ID,这将用于后续的`pom.xml`中引用。 ```xml <servers> <server> <id>my-nexus</id> <username>your-nexus-...
要在POM.xml文件中定义Profile,我们可以在`<project>`标签下添加`<profiles>`标签,然后在其中定义具体的Profile。例如,我们可以为开发、测试和生产环境创建三个Profile: ```xml <profiles> <profile> <id>dev...
Maven 插件可以在 `settings.xml` 的 `<pluginGroups>` 部分进行配置,以便在不提供完整组 ID 的情况下使用插件: ```xml <pluginGroups> <pluginGroup>com.mycompany.plugins</pluginGroup> </pluginGroups> ``` ...
在`<profiles>`标签内,定义一个profile,包括对发布到私服的配置: ```xml <profiles> <profile> <id>nexus-release</id> <repositories> <repository> <id>my-nexus-release</id> <url>...
在`<mirrors>`部分,需要指定私服的镜像地址,并且确保只配置了私服的地址。如果之前配置了其他公共镜像(如阿里云),需要将其替换为私服的地址: ```xml <mirrors> <mirror> <id>nexus</id> <mirrorOf>*</...
本文将深入探讨如何使用Maven的POM(Project Object Model)文件实现多环境部署,使得代码能够在开发、测试和生产等不同环境中无缝切换。 首先,让我们理解什么是POM文件。POM是Maven的核心概念,它是一个XML文件,...
在这个“maven java项目实例”中,我们将会探讨如何使用Maven进行Java项目的构建,特别是关于Maven Profile动态选择配置文件的实践。 首先,Maven的POM.xml文件是项目的中心,包含了项目的配置信息,如依赖管理、...