`
xigua366
  • 浏览: 103084 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

<profile>中的配置项只会将根节点进行替换

阅读更多

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插件的配置项是否都起作用了,若起作用,说明我的理解是对的。(我已经验证过了,有兴趣的朋友可以尝试一下)。

 

1
0
分享到:
评论

相关推荐

    maven profile多环境配置

    在 POM 文件中,我们可以使用 `&lt;profiles&gt;` 元素来定义不同的 Profile。每个 Profile 都可以定义自己的配置文件,用于存储环境相关的配置信息。例如,我们可以定义一个开发环境的 Profile,如下所示: ```xml ...

    Maven下实现多种环境下的资源配置管理

    通过`&lt;build&gt;&lt;resources&gt;`节点下的`&lt;filtering&gt;`属性,我们可以指定哪些资源文件需要进行过滤。例如,我们可以为不同的环境定义不同的数据库连接字符串。 ```xml &lt;build&gt; &lt;resources&gt; &lt;resource&gt; &lt;directory&gt;...

    SpringBoot开发环境、测试环境、部署环境切换.pdf

    在`&lt;build&gt;`节点中,我们需要配置Maven的资源过滤,以便在打包时选择正确的配置文件: ```xml &lt;build&gt; &lt;resources&gt; &lt;!-- 配置文件过滤器 --&gt; &lt;resource&gt; &lt;directory&gt;src/main/resources/env&lt;/directory&gt; ...

    idea下test自动测试profiles配置

    本篇文章将详细探讨如何在Idea中配置Maven的profiles以实现test自动测试。 首先,让我们理解什么是Maven的profiles。Profiles是Maven配置的一个重要部分,它允许我们在一个项目中定义不同环境的配置,如开发、测试...

    使用maven Profile实现多环境构建

    在软件开发过程中,特别是在企业级应用的构建中,往往需要针对不同的运行环境(如开发、测试、生产等)进行配置的差异化处理。Maven作为Java项目管理的强大工具,提供了Profile功能来解决这个问题。Profile允许我们...

    1.2.maven多模块项目配置1

    在本节中,我们将详细讨论Maven多模块项目配置的实现方法。Maven多模块项目是指一个父模块包含多个子模块,每个子模块都是一个独立的Maven项目。这种结构可以使得项目的管理和维护变得更加方便。 父模块配置 在父...

    springboot通过@Profile注解配置不同环境

    在本案例中,我们将深入探讨如何使用`@Profile`注解以及结合Maven来实现多环境配置。 首先,`@Profile`注解用于标记一个类或方法,表示该类或方法只在指定的环境中生效。例如,我们可以为开发环境创建一个`...

    settings.zip

    1. **本地仓库(Local Repository)**: Maven默认将下载的依赖项存储在本地仓库中。在`settings.xml`里,你可以指定一个自定义的位置,例如: ```xml &lt;localRepository&gt;/path/to/your/local/repo&lt;/localRepository...

    Springboot与Maven多环境配置文件夹解决方案.docx

    本文介绍了如何使用 SpringBoot 和 Maven 实现多环境配置文件夹解决方案,使用 Profile 功能来加载不同的配置文件,使用 Resources 和 Filter 来指定打包内容和替换变量,选择当前环境,加载对应的配置文件。

    maven的settings.xml文件

    `&lt;profiles&gt;`中的配置可以通过`&lt;activation&gt;`标签自动激活,基于操作系统、JDK版本或其他属性: ```xml &lt;profile&gt; &lt;id&gt;linux&lt;/id&gt; &lt;activation&gt; &lt;os&gt; &lt;name&gt;Linux&lt;/name&gt; &lt;/os&gt; &lt;/activation&gt; ... &lt;/profile...

    maven 配置多仓库

    &lt;id&gt;nexus-profile&lt;/id&gt; &lt;repositories&gt; &lt;repository&gt; &lt;id&gt;repo1&lt;/id&gt; &lt;url&gt;http://repo1.maven.org/maven2&lt;/url&gt; &lt;snapshots&gt;&lt;enabled&gt;false&lt;/enabled&gt;&lt;/snapshots&gt; &lt;/repository&gt; &lt;repository&gt; &lt;id&gt;repo2...

    使用maven Filtering实现多环境构建

    每次构建时,Maven会根据激活的Profile替换资源文件中的占位符,生成适合目标环境的配置。这种方法既保持了代码库的整洁,又避免了手动修改配置文件的错误。 在实际应用中,还可以结合使用Maven的`assembly插件`或`...

    maven私服(nexus)配置(setting,pom.xml)

    1. **添加服务器ID**:在`settings.xml`的`servers`节点下,创建一个新的`server`节点,设置一个唯一的ID,这将用于后续的`pom.xml`中引用。 ```xml &lt;servers&gt; &lt;server&gt; &lt;id&gt;my-nexus&lt;/id&gt; &lt;username&gt;your-nexus-...

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

    要在POM.xml文件中定义Profile,我们可以在`&lt;project&gt;`标签下添加`&lt;profiles&gt;`标签,然后在其中定义具体的Profile。例如,我们可以为开发、测试和生产环境创建三个Profile: ```xml &lt;profiles&gt; &lt;profile&gt; &lt;id&gt;dev...

    maven 通用配置

    Maven 插件可以在 `settings.xml` 的 `&lt;pluginGroups&gt;` 部分进行配置,以便在不提供完整组 ID 的情况下使用插件: ```xml &lt;pluginGroups&gt; &lt;pluginGroup&gt;com.mycompany.plugins&lt;/pluginGroup&gt; &lt;/pluginGroups&gt; ``` ...

    maven 3.8.1版本私服配置版本

    在`&lt;profiles&gt;`标签内,定义一个profile,包括对发布到私服的配置: ```xml &lt;profiles&gt; &lt;profile&gt; &lt;id&gt;nexus-release&lt;/id&gt; &lt;repositories&gt; &lt;repository&gt; &lt;id&gt;my-nexus-release&lt;/id&gt; &lt;url&gt;...

    2024私服配置说明HM

    在`&lt;mirrors&gt;`部分,需要指定私服的镜像地址,并且确保只配置了私服的地址。如果之前配置了其他公共镜像(如阿里云),需要将其替换为私服的地址: ```xml &lt;mirrors&gt; &lt;mirror&gt; &lt;id&gt;nexus&lt;/id&gt; &lt;mirrorOf&gt;*&lt;/...

    maven多环境部署pom文件实例

    本文将深入探讨如何使用Maven的POM(Project Object Model)文件实现多环境部署,使得代码能够在开发、测试和生产等不同环境中无缝切换。 首先,让我们理解什么是POM文件。POM是Maven的核心概念,它是一个XML文件,...

    maven java项目实例

    在这个“maven java项目实例”中,我们将会探讨如何使用Maven进行Java项目的构建,特别是关于Maven Profile动态选择配置文件的实践。 首先,Maven的POM.xml文件是项目的中心,包含了项目的配置信息,如依赖管理、...

Global site tag (gtag.js) - Google Analytics