maven 默认情况下,对/main/resources/下的资源文件全部复制到target/classes下,然后打包,对于需要依赖环境或可变参数进行打包时,
如下的环境信息:
dev 开发环境
sit sit测试环境
uat uat测试环境
pre 预生产测试环境
prod 线上的生产环境
各环境的数据库配置完全不一样,还有一些配置,是依赖对应环境的内部系统,如在uat环境布署
的电子商务系统,就需要配置uat环境的订单处理系统,而不能调用dev环境的订单系统.
对于这种需求,有两种处理方式:
第一种,在proterties文件里使用${}变量,使用maven的filter进行赋值
http://maven.apache.org/shared/maven-filtering/
http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
这种变量在打包时,由maven从另一个依赖环境的配置文件里读出并赋值
比如
......
配置五个对应的配置,然后在build配置里配置filter
然后添加maven profile配置,每个环境对应一个profile
这时最终的配置文件test.properties里的属性会被替换为
stackoverflow里web资源的替换
对于web资源,比如放到webapp目录下的js文件,不同的环境,需要用到不同的文件,可以使用
maven-war-plugin在打包时进行配置,
比如,我们在src/main/resources/目录下新建web目录,用于存放需要复制到webapp目录里的文件
比如我有个config.json文件,这个文件在dev sit uat prod 环境里都不一样
最终webapp目录结构如下:
config.json文件内容为
创建src/main/resources/web/资源目录,目录结构如下:
config.json文件内容为
在执行 mvn package -Pprofile命令时,config.json里变量的值会被相应的替换和合适的值
第二种,使用maven-resources-plugin 的copy方式,将对应环境的配置对整个目录和文件进行覆盖。
http://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html
如下的环境信息:
dev 开发环境
sit sit测试环境
uat uat测试环境
pre 预生产测试环境
prod 线上的生产环境
各环境的数据库配置完全不一样,还有一些配置,是依赖对应环境的内部系统,如在uat环境布署
的电子商务系统,就需要配置uat环境的订单处理系统,而不能调用dev环境的订单系统.
对于这种需求,有两种处理方式:
第一种,在proterties文件里使用${}变量,使用maven的filter进行赋值
http://maven.apache.org/shared/maven-filtering/
http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
//test.properties jdbcname=${user_name} jdbcpasswd=${user_passwd}
这种变量在打包时,由maven从另一个依赖环境的配置文件里读出并赋值
比如
//在目录main/resources/sit/下 //env.properties user_name=user_sit user_passwd=passwd_sit ctx=somepath
//在目录main/resources/uat/下 //env.properties user_name=user_uat user_passwd=passwd_uat ctx=
......
配置五个对应的配置,然后在build配置里配置filter
<build> ... <filters> <filter>src/main/resources/${env}/env.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> ... </build>
然后添加maven profile配置,每个环境对应一个profile
<profiles> <!-- dev开发环境,默认激活 --> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <activeByDefault>true</activeByDefault><!--默认启用的是dev环境配置 --> </activation> </profile> <!-- sit测试环境 --> <profile> <id>sit</id> <properties> <env>sit</env> </properties> </profile> <!-- uat测试环境 --> <profile> <id>uat</id> <properties> <env>uat</env> </properties> </profile> <!-- pre预生产测试环境 --> <profile> <id>pre</id> <properties> <env>pre</env> </properties> </profile> <!-- prod生产环境 --> <profile> <id>prod</id> <properties> <env>prod</env> </properties> </profile> </profiles>
//打包命令 打包uat环境的配置 mvn clean package -Puat
这时最终的配置文件test.properties里的属性会被替换为
//test.properties jdbcname=user_uat jdbcpasswd=passwd_uat
stackoverflow里web资源的替换
对于web资源,比如放到webapp目录下的js文件,不同的环境,需要用到不同的文件,可以使用
maven-war-plugin在打包时进行配置,
比如,我们在src/main/resources/目录下新建web目录,用于存放需要复制到webapp目录里的文件
比如我有个config.json文件,这个文件在dev sit uat prod 环境里都不一样
最终webapp目录结构如下:
├─META-INF ├─static │ ├─bootstrap │ │ └─2.3.2 │ │ ├─css │ │ │ bootstrap-responsive.min.css │ │ │ bootstrap.min.css │ │ │ │ │ ├─img │ │ │ glyphicons-halflings-white.png │ │ │ glyphicons-halflings.png │ │ │ │ │ └─js │ │ bootstrap.min.js │ │ │ ├─images │ │ favicon.ico │ │ │ ├─jquery │ │ config.json //该文件在各个目录里的配置都不一样 │ │ jquery-1.9.1.min.js │ │ │ ├─jquery-validation │ │ └─1.11.1 │ │ │ jquery.validate.min.js │ │ │ messages_bs_zh.js │ │ │ validate.css │ │ │ │ │ └─images │ │ unchecked.gif │ │ │ └─styles │ default.css │
config.json文件内容为
{ prefix:"old value", path:"/upload/path" }
创建src/main/resources/web/资源目录,目录结构如下:
└─static └─jquery config.json
config.json文件内容为
{ prefix:"${ctx}", path:"/upload/path" }
<!-- war打包插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warName>${project.artifactId}</warName> <filters> <filter>src/main/resources/env/application-${env}.properties</filter> </filters> <webResources> <resource> <directory>src/main/resources/web</directory> <filtering>true</filtering> </resource> </webResources> </configuration> </plugin>
在执行 mvn package -Pprofile命令时,config.json里变量的值会被相应的替换和合适的值
第二种,使用maven-resources-plugin 的copy方式,将对应环境的配置对整个目录和文件进行覆盖。
http://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html
<profiles> <!-- dev开发环境,默认激活 --> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <activeByDefault>true</activeByDefault><!--默认启用的是dev环境配置 --> </activation> </profile> <!-- sit测试环境 --> <profile> <id>sit</id> <properties> <env>sit</env> </properties> </profile> <!-- uat测试环境 --> <profile> <id>uat</id> <properties> <env>uat</env> </properties> </profile> <!-- pre预生产测试环境 --> <profile> <id>pre</id> <properties> <env>pre</env> </properties> </profile> <!-- prod生产环境 --> <profile> <id>prod</id> <properties> <env>prod</env> </properties> </profile> </profiles>
<build> .... <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.7</version> <executions> <execution> <id>copy-resources</id> <!-- here the phase you need --> <phase>process-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target/classes/</outputDirectory> <resources> <resource> <directory>src/main/resources/${env}/</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> .... </build>
//打包命令 打包uat环境的配置 mvn clean package -Puat
发表评论
-
find 的正则表达式
2020-03-11 13:33 803‘findutils-default’ regula ... -
bat 位运算
2020-03-09 14:35 479必须要用引号括起来 set /a "resul ... -
bat 正则替换
2020-03-09 14:00 1535这是一段javascript,通过bat替换为指定字符串 ... -
U盘自动压缩复制小程序
2020-02-28 10:35 400经常需要复制文件到U盘,或者从U盘复制出来,基本上是同一个文件 ... -
解决maven-metadata.xml文件下载卡死问题
2019-04-11 14:02 4007http://192.168.1.110:8081/nexus ... -
svn输出本次变动的文件列表
2017-09-08 15:46 945eclipse的svn里,无法复制本次修改的文件列表,命令行里 ... -
centos 安装git版本管理工具
2016-12-05 17:03 571yum -y install gcc yu ... -
jenkins中集成sonar,使用findbug、pmd、checkstyle提升代码质量
2016-09-29 14:58 6186实际上jenkins单独也 ... -
jenkins 集成sonar
2016-09-18 10:14 0jenkins集成sonar可以从插件中心直接更新安装 son ... -
iteye博客内容搜索
2016-06-16 09:28 1277iteye的搜索功能,实在是太弱了,自已博客里的东西,基本 ... -
在centos中安装jenkins
2016-07-15 09:55 446在centos中安装jenkins 1)安装目录 pwd ... -
svn swtich命令
2015-10-09 18:29 671该命令会切换SVN目录到一个新的SVN URL上,切目录内的内 ... -
轻领导力 | 什么是高级主管的管理思维?
2015-09-24 14:58 0轻领导力 | 什么是高级 ... -
当前是第几周
2015-08-03 17:48 822如果一周开始于星期一:=weeknum(date,2),反之一 ... -
vbs的xmlHttp.responseText无效的调用过程
2015-02-27 16:20 1032vbs真是门恶心人的语言, set xmlhttp = C ... -
maven 执行ant 任务
2014-12-25 14:59 857<build> <plugins> ... -
subclipse tree conflict
2014-12-04 12:30 1110最近合并分支代码时,总是报tree conflict ... -
subclipse merge Missing ranges解决办法
2014-10-31 17:34 5259引用 merge https://repo.ds.sss.co ... -
svn subclipse 的Change-set base merge
2014-10-31 16:19 2129Change-set base merge 名词:Col ... -
svn 导出日志
2014-10-16 17:57 3683//导出指定日期范围的日志 svn log -vr { ...
相关推荐
1. **依赖管理**:Maven 自动处理项目之间的依赖关系,只需在 POM.xml 文件中声明所需库,Maven 就会自动下载并管理这些库,避免了手动配置和版本冲突的问题。 2. **标准化构建过程**:Maven 提供了一套预定义的...
### ResourceBundle与Properties读取Maven中Resources目录下的资源文件 #### 一、概述 在Java开发过程中,我们经常需要读取资源文件中的配置信息。在Maven项目中,`src/main/resources`目录下通常存放了各种配置...
在提供的资源包中,Maven资源文件应该包含了一系列的Jar包,这些是SSM框架运行所必需的库。例如,Spring的核心库(spring-context、spring-beans等)、SpringMVC的相关库(spring-webmvc等)、MyBatis的主库和驱动库...
标题中的“maven资源安装包”指的是一个包含Maven完整环境的压缩文件,它通常包含了Maven的执行文件、配置文件以及必要的库文件,使得用户能够快速地在本地环境中搭建并使用Maven。 Maven的核心概念是项目对象模型...
Maven资源过滤机制是Maven的一项强大功能,允许开发者在构建项目时对资源文件进行过滤和替换。该机制可以帮助开发者简化项目配置和部署过程。然而,该机制也可能会导致文件变大,影响项目的构建和部署效率。 二、...
Maven允许通过环境变量`MAVEN_OPTS`设置JVM参数,如增加堆内存大小 `-Xmx512m`,这对于处理大型项目或运行资源密集型插件非常有用。 6. **生命周期(Lifecycle)与构建阶段(Phases)** Maven的生命周期包括`...
这个过程不仅包括编译Java代码,还包括处理资源文件,如.properties, .xml, 和 .yml文件,这些文件对Spring Boot应用的配置至关重要。下面将详细解释如何使用Maven进行打包,并特别关注如何处理这些资源文件。 首先...
5. **打包**:将编译后的类文件和资源文件打包成可发布的格式,如JAR或WAR。 6. **验证**:验证打包后的文件是否符合发布要求。 7. **部署**:将最终的包部署到指定的服务器。 在实际开发中,我们可能会遇到一些...
Maven通过使用Project Object Model (POM)文件来描述项目信息,包括依赖、构建配置、插件设置等。POM.xml是Maven项目的核心,它使得项目的配置可重用,提高了开发效率。 Maven的依赖管理功能非常强大。它会自动解决...
- Maven使用传递性依赖管理,一个项目依赖的库可能间接依赖其他库,Maven会自动处理这些依赖关系。 - 当出现依赖冲突时,可以通过 `<dependencyManagement>` 标签进行统一管理,或者使用 `<exclusions>` 标签排除...
在Maven项目中,资源文件(如配置文件、XML文件等)的处理非常重要。Maven通过`<build>`标签下的`<resources>`配置来管理这些资源文件的编译和打包过程。本文将详细解析如何通过POM配置文件控制资源文件的过滤行为。...
Maven 使用一种标准的项目对象模型(Project Object Model,POM),通过POM文件来描述项目的配置信息,包括构建过程、依赖关系、团队信息等。Maven 3.5.0是该工具的一个重要版本,引入了一些新特性和改进。 ** ...
在本文中,我们将深入探讨如何使用Maven进行Android开发和资源管理。Maven是一个强大的项目管理和构建工具,它可以帮助开发者管理依赖、构建项目以及自动化各种构建过程。对于Android开发,Maven提供了一种统一的...
【尚硅谷Maven课程笔记代码资源】是一份全面学习Maven的资料集合,它涵盖了从基础到高级的各种知识点,旨在帮助开发者深入理解并熟练运用Maven进行自动化构建。该资源包含课件、源码和相关的笔记,使得学习过程更加...
Hibernate是一个对象关系映射(ORM)工具,它允许开发人员使用面向对象的编程方式来处理数据库,避免了传统的SQL操作,提高了开发效率。 **内容详解:** 1. **Hibernate框架介绍**:Hibernate是一个开源的Java ORM...
Maven 3.1 提供了一种更简洁的配置方式,允许用户通过注释和内联配置来减少 pom.xml 文件的复杂性。同时,这个版本改进了对插件的管理,增强了插件执行的性能和稳定性。对于插件的自动发现和升级,Maven 3.1 也提供...
1. **配置`<build>`部分**:在`pom.xml`的`<build>`标签内,我们可以添加一个`<resources>`标签来指定资源文件的处理方式。对于类文件,我们可以设置`<directory>`属性为`src/main/java`,这样Maven就会在这个路径下...
总的来说,Maven 3.5.2 资源包为开发者提供了一套完整的构建环境,简化了项目管理和构建流程,通过统一的配置和自动化处理,极大地提高了开发效率。了解并熟练使用Maven,对于任何Java开发者来说都是至关重要的。
2. **文件夹方式**:创建不同环境的配置文件夹,如`src/main/resources-dev`、`src/main/resources-test`和`src/main/resources-prod`,并使用Maven资源过滤(Resource Filtering)来选择合适的资源文件。...
例如maven-clean-plugin用于清理项目构建目录,maven-compiler-plugin用于编译Java代码,maven-resources-plugin用于处理项目的资源文件等。当你运行mvn clean install时,Maven会按照生命周期顺序,调用相应的插件...