maven针对不同环境构建项目

maven使用属性、profile及资源过滤支持针对不同环境构建项目


maven属性

maven共有六类属性

1、最常见的是自定义属性,即在pom文件里通过<properties>元素定义的属性

2、环境变量属性,可以使用env.引用,可以使用mvn help:system查看所有的环境变量

java.env=${env.JAVA_HOME}

3、系统属性,也可以使用mvn help:system查看所有的系统属性

${user.home}指向了用户目录,即C:/Users/Administrator
user.home=${user.home}

4、setting属性

localRepository=${settings.localRepository}

5、maven内置属性

${basedir}表示根目录
project.basedir=${basedir}
${version}表示项目版本
project.version=${version}

6、pom属性

源码目录
sourceDirectory=${project.build.sourceDirectory}
测试类源码目录
testSourceDirectory=${project.build.testSourceDirectory}
构建目录
directory=${project.build.directory}
构建后class所在的目录
outputDirectory=${project.build.outputDirectory}
构建后测试类class所在的目录
testOutputDirectory=${project.build.testOutputDirectory}
项目组Id
groupId=${project.groupId}
构件Id
artifactId=${project.artifactId}
项目版本
version=${project.version}
构建后jar包或war包的名称,默认为${project.artifactId}-${project.version}
finalName=${project.build.finalName}
project可以省略

profile

(1) profile在pom.xml或settings.xml中都可以声明

pom.xml中的profile只对当前项目有效,用户settings.xml中的profile对该用户所有的maven项目有效,全局settings.xml中的profile对本机上所有的maven项目有效
由于pom.xml中的profile能随着pom.xml一起提交到代码仓库中、被安装到本地仓库中、被部署到远程仓库中,所以pom.xml中的frofile可以声明的元素很多,如下所示:

<project>
<repositories></repositories>
<pluginRepositories></pluginRepositories>
<distributionManagement></distributionManagement>
<dependencies></dependencies>
<dependenyManagement></dependenyManagement>
<modules></modules>
<properties></properties>
<reporting></reporting>
<build>
<plugins></plugins>
<defalutGoal></defalutGoal>
<resources></resources>
<testResources></testResources>
<finalName></finalName>
</build>
</project>

而settings.xml中可以声明的元素很少,只支持以下几个

<project>
<repositories></repositories>
<pluginRepositories></pluginRepositories>
<properties></properties>
</project>

(2)demo

<project>
...
<profiles>
<profile>
<id>dev</id>
<properties>
<db.url>jdbc:mysql://localhost:3306/dev</db.url>
<db.username>root</db.username>
<db.password>root</db.password>
</properties>
</profile>
<profile>
<id>test</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<db.url>jdbc:mysql://localhost:3306/test</db.url>
<db.username>test</db.username>
<db.password>test</db.password>
</properties>
</profile>
</profiles>
</project>

使用profile包裹其它元素声明与直接使用这些元素声明并无二致


 资源过滤

1、maven属性默认只在pom中被解析,也就是说在profile中声明的<db.username>root</db.username>,只能在pom文件中使用${db.username}引用,如果想在src/main/resources/目录下的资源文件里引用,需要开启资源过滤。

2、如果想在src/main/webapp/目录下的文件里引用maven属性,比如需要在构建项目的时候,给不同的客户使用不一样的资源文件,可能客户的logo图片不同或者css主题不同,想要在一个html文件中使用形如${client.logo}的方式来引用已经由profile定义好的内容,也需要开启资源过滤。

提示:web项目中有两种资源文件,一般资源文件和web资源文件。

一般资源文件同样位于src/main/resources/目录下,它们经过处理后会位于WAR包的WEB-INF/classes目录下,这也是java代码编译打包后的目录。也就是说,这类资源文件在打包后会位于应用程序的classpath中。

web资源文件的源码默认位于src/main/webapp/目录,经打包后位于WAR包的根目录。比如,一个web项目的css源码文件在src/main/webapp/css/目录,项目打包后可以在WAR包的css/目录下找到对应的css文件。

3、开启资源过滤只要给对应插件添加<filtering>true</filtering>就可以了,示例如下:

    <build>
<finalName>maven-profile-demo</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<!-- 为web资源开启资源过滤 -->
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
<includes>
<!-- 下面这些文件要过滤 -->
<include>**/*.css</include>
<include>**/*.js</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
<!-- 为主资源目录开启资源过滤 -->
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<!-- 为测试资源目录开启资源过滤 -->
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
</build>

项目demo

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test.profile</groupId>
<artifactId>maven-profile-demo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>maven-profile-demo</name> <properties>
<my.car>bike</my.car>
</properties>
<build>
<finalName>maven-profile-demo</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<!-- 为web资源开启资源过滤 -->
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp</directory>
<includes>
<!-- 下面这些文件要过滤 -->
<include>**/*.jsp</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
<!-- 为主资源目录开启资源过滤 -->
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<db.url>jdbc:mysql://localhost:3306/dev</db.url>
<db.username>root</db.username>
<db.password>root</db.password>
</properties>
</profile>
<profile>
<id>test</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<db.url>jdbc:mysql://localhost:3306/test</db.url>
<db.username>test</db.username>
<db.password>test</db.password>
</properties>
</profile>
</profiles>
</project>

pom.xml

# 一、profile
jdbc.url=${db.url}
jdbc.username=${db.username}
jdbc.password=${db.password} # 二、maven共有六类属性支持
# 1、最常见的是自定义属性,即在pom文件里通过<properties>元素定义的属性
myCar=${my.car} # 2、环境变量属性,可以使用env.引用,可以使用mvn help:system查看所有的环境变量
java.env=${env.JAVA_HOME} # 3、系统属性,user.home指向了用户目录,也可以使用mvn help:system查看所有的系统属性
user.home=${user.home} # 4、setting属性
# 本地仓库
localRepository=${settings.localRepository} # 5、maven内置属性,${basedir}表示根目录,${version}表示项目版本
project.basedir=${basedir}
project.version=${version} # 6、pom属性
# 源码目录
sourceDirectory=${project.build.sourceDirectory}
# 测试类源码目录
testSourceDirectory=${project.build.testSourceDirectory}
# 构建目录
directory=${project.build.directory}
# 构建后class所在的目录
outputDirectory=${project.build.outputDirectory}
# 构建后测试类class所在的目录
testOutputDirectory=${project.build.testOutputDirectory}
# 项目组Id
groupId=${project.groupId}
# 构件Id
artifactId=${project.artifactId}
# 项目版本
version=${project.version}
# 构建后jar包或war包的名称,默认为${project.artifactId}-${project.version}
finalName=${project.build.finalName}
# project可以省略

resources目录下的文件database.properties

jdbc.url=${db.url}
jdbc.username=${db.username}
jdbc.password=${db.password} myCar=${my.car}
java.env=${env.JAVA_HOME}
user.home=${user.home}
localRepository=${settings.localRepository}
project.basedir=${basedir}
project.version=${version}
sourceDirectory=${project.build.sourceDirectory}
testSourceDirectory=${project.build.testSourceDirectory}
directory=${project.build.directory}
outputDirectory=${project.build.outputDirectory}
testOutputDirectory=${project.build.testOutputDirectory}
groupId=${project.groupId}
artifactId=${project.artifactId}
version=${project.version}
finalName=${project.build.finalName}

resources目录下的文件test.txt

<html>
<body>
jdbc.url=${db.url}
jdbc.username=${db.username}
jdbc.password=${db.password}
</body>
</html>

wabapp目录下的文件index.jsp

1、pom文件中定义了一个profiles
2、pom文件中还开启了web资源过滤和一般资源过滤
3、打包:
mvn clean install -Ptest
mvn clean install -Pdev
4、查看target/classes目录下的database.properties、test.txt
查看target/maven-profile-demo目录下的index.jsp 提示:
maven可以激活多个profile
mvn clean install -Pdev-x,dev-y

readme.txt

maven属性、profile、资源过滤、不同环境构建项目的更多相关文章

  1. 【maven】Maven根据Profile读取不同配置环境配置文件

    开发需求:在日常开发中,我们大多都会有开发环境(dev).测试环境(test).生产环境(product),不同环境的参数肯定不一样,我们需要在打包的时候,不同环境打不同当包,如果手动改,一方面效率低 ...

  2. maven属性

    Maven内置了三大特性:属性.Profile和资源过滤来支持构建的灵活性. 内置属性:主要有两个常用内置属性 ${basedir}表示项目根目录,即包含pom.xml文件的目录 ${version} ...

  3. Maven属性、profile和资源过滤

    Maven的六类属性 内置属性 主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本 POM属性 用户可以使用该属性引用POM文件中对 ...

  4. Maven学习笔记5:Maven属性、profile和资源过滤

    Maven的六类属性 内置属性 主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本 POM属性 用户可以使用该属性引用POM文件中对 ...

  5. maven之---资源过滤 在java/main/resourse/*.xml ,*.properties引用maven属性${db.username}

    本文主要来源maven实战14.3 为了应对环境的变化,首先使用Maven属性将这个会发生变化的部分提取出来.在上一节的数据库配置中,连接数据库使用的驱动类,URL,用户名和密码都可能发生变化,因此使 ...

  6. 使用Maven Profile实现多环境构建

    在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次 ...

  7. IDEA结合Maven的profile构建不同开发环境(SpringBoot)

    一.概述 在开发过程中,我们的项目会存在不同的开发环境,比如开发环境.生产环境.测试环境,而我们的项目在不同的环境中有些配置也是不一样的,比如数据源配置.日志文件配置等,假如我们每次将软件部署到不同的 ...

  8. Maven系列第9篇:多环境构建支持,核心开发必备!

    maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能. 这是maven系列第9篇. 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部 ...

  9. Maven私服Nexus3.x环境构建操作记录

    Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件.Ma ...

随机推荐

  1. 去掉iphone上拨号弹出框

    1.常规的方法可以直接去除默认事件event.preventDefault() 2.使用vue的话可以: <div @click.stop.prevent=</div> //或者 & ...

  2. 【kafka】kafka.admin.AdminOperationException: replication factor: 1 larger than available brokers: 0

    https://blog.csdn.net/bigtree_3721/article/details/78442912 I am trying to create topics in Kafka by ...

  3. 拦截并记录数据库操作-Logging and Intercepting Database Operations

    原文:http://msdn.microsoft.com/zh-cn/data/dn469464 Logging and Intercepting Database Operations Starti ...

  4. databinding在android studio2.3版本后不再默认支持使用

    databinding在android studio2.3版本后不再默认支持使用,需要在项目的app-build-gradle的 dependencies 里面添加 apt 'com.android. ...

  5. 数据分析--降维--LDA和PCA

    一.因子分析 因子分析是将具有错综复杂关系的变量(或样本)综合为少数几个因子,以再现原始变量和因子之间的相互关系,探讨多个能够直接测量,并且具有一定相关性的实测指标是如何受少数几个内在的独立因子所支配 ...

  6. 破局人工智能:构建AI,与腾讯云一起探索语音应用场景

    本文来自腾讯云技术沙龙,本次沙龙主题为AI平台及智能语音应用解析 近年来,人工智能技术快速发展,与其他行业的结合也成为业界不断探索的方向.在人工智能基础和工具方面,AI平台已成为降低人工智能门槛的关键 ...

  7. 原生js实现拖动滑块验证

    拖动滑块验证是现在的网站随处可见的,各式各样的拖动法都有. 下面实现的是某宝的拖动滑块验证: <!DOCTYPE html> <html lang="en"> ...

  8. SpringMVC 之 Hello World 入门

    1 准备开发环境和运行环境 依赖 jar 包下载,如下图所示: 2 前端控制器的配置 在我们的web.xml中添加如下配置: <!-- The front controller of this ...

  9. [转]Asp.Net 网站多语言解决方案

    本文转自:https://www.cnblogs.com/FredTang/archive/2013/01/23/2873231.html 最近领导要求实现PMSWeb应用程序的多区域语言的支持,所以 ...

  10. [日常] SinaMail项目和技术能力总结

    一.企邮WEBMAIL项目1.完成手机绑定二次验证,绑定手机提升账户的安全性2.登陆验证接口改造,增加一系列登陆限制,增强webmail的系统可靠性3.增加外发限制功能,及时控制用户发信行为,有利于企 ...