`

maven 处理资源文件的方式

 
阅读更多
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
//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
分享到:
评论

相关推荐

    maven3.5.4打包文件

    1. **依赖管理**:Maven 自动处理项目之间的依赖关系,只需在 POM.xml 文件中声明所需库,Maven 就会自动下载并管理这些库,避免了手动配置和版本冲突的问题。 2. **标准化构建过程**:Maven 提供了一套预定义的...

    ResourceBundle与Properties读取maven中resources目录下的资源文件

    ### ResourceBundle与Properties读取Maven中Resources目录下的资源文件 #### 一、概述 在Java开发过程中,我们经常需要读取资源文件中的配置信息。在Maven项目中,`src/main/resources`目录下通常存放了各种配置...

    SSM框架Maven资源文件

    在提供的资源包中,Maven资源文件应该包含了一系列的Jar包,这些是SSM框架运行所必需的库。例如,Spring的核心库(spring-context、spring-beans等)、SpringMVC的相关库(spring-webmvc等)、MyBatis的主库和驱动库...

    maven资源安装包

    标题中的“maven资源安装包”指的是一个包含Maven完整环境的压缩文件,它通常包含了Maven的执行文件、配置文件以及必要的库文件,使得用户能够快速地在本地环境中搭建并使用Maven。 Maven的核心概念是项目对象模型...

    maven资源过滤打包后文件变大的处理方法

    Maven资源过滤机制是Maven的一项强大功能,允许开发者在构建项目时对资源文件进行过滤和替换。该机制可以帮助开发者简化项目配置和部署过程。然而,该机制也可能会导致文件变大,影响项目的构建和部署效率。 二、...

    maven3配置文件

    Maven允许通过环境变量`MAVEN_OPTS`设置JVM参数,如增加堆内存大小 `-Xmx512m`,这对于处理大型项目或运行资源密集型插件非常有用。 6. **生命周期(Lifecycle)与构建阶段(Phases)** Maven的生命周期包括`...

    sprintboot maven 打包分享lib 资源文件properties xml yml

    这个过程不仅包括编译Java代码,还包括处理资源文件,如.properties, .xml, 和 .yml文件,这些文件对Spring Boot应用的配置至关重要。下面将详细解释如何使用Maven进行打包,并特别关注如何处理这些资源文件。 首先...

    maven 资源

    5. **打包**:将编译后的类文件和资源文件打包成可发布的格式,如JAR或WAR。 6. **验证**:验证打包后的文件是否符合发布要求。 7. **部署**:将最终的包部署到指定的服务器。 在实际开发中,我们可能会遇到一些...

    maven资源 apache-maven-3.3.9-bin.zip

    Maven通过使用Project Object Model (POM)文件来描述项目信息,包括依赖、构建配置、插件设置等。POM.xml是Maven项目的核心,它使得项目的配置可重用,提高了开发效率。 Maven的依赖管理功能非常强大。它会自动解决...

    SpringBoot项目使用maven配置文件

    - Maven使用传递性依赖管理,一个项目依赖的库可能间接依赖其他库,Maven会自动处理这些依赖关系。 - 当出现依赖冲突时,可以通过 `&lt;dependencyManagement&gt;` 标签进行统一管理,或者使用 `&lt;exclusions&gt;` 标签排除...

    解决Maven资源过滤的pom配置文件

    在Maven项目中,资源文件(如配置文件、XML文件等)的处理非常重要。Maven通过`&lt;build&gt;`标签下的`&lt;resources&gt;`配置来管理这些资源文件的编译和打包过程。本文将详细解析如何通过POM配置文件控制资源文件的过滤行为。...

    Maven 3.5.0版本资源

    Maven 使用一种标准的项目对象模型(Project Object Model,POM),通过POM文件来描述项目的配置信息,包括构建过程、依赖关系、团队信息等。Maven 3.5.0是该工具的一个重要版本,引入了一些新特性和改进。 ** ...

    使用Maven进行Android的开发与资源管理

    在本文中,我们将深入探讨如何使用Maven进行Android开发和资源管理。Maven是一个强大的项目管理和构建工具,它可以帮助开发者管理依赖、构建项目以及自动化各种构建过程。对于Android开发,Maven提供了一种统一的...

    尚硅谷Maven课程笔记代码资源

    【尚硅谷Maven课程笔记代码资源】是一份全面学习Maven的资料集合,它涵盖了从基础到高级的各种知识点,旨在帮助开发者深入理解并熟练运用Maven进行自动化构建。该资源包含课件、源码和相关的笔记,使得学习过程更加...

    hibernate Maven仓库资源

    Hibernate是一个对象关系映射(ORM)工具,它允许开发人员使用面向对象的编程方式来处理数据库,避免了传统的SQL操作,提高了开发效率。 **内容详解:** 1. **Hibernate框架介绍**:Hibernate是一个开源的Java ORM...

    maven3.1文件

    Maven 3.1 提供了一种更简洁的配置方式,允许用户通过注释和内联配置来减少 pom.xml 文件的复杂性。同时,这个版本改进了对插件的管理,增强了插件执行的性能和稳定性。对于插件的自动发现和升级,Maven 3.1 也提供...

    Maven打包,指定classes路径

    1. **配置`&lt;build&gt;`部分**:在`pom.xml`的`&lt;build&gt;`标签内,我们可以添加一个`&lt;resources&gt;`标签来指定资源文件的处理方式。对于类文件,我们可以设置`&lt;directory&gt;`属性为`src/main/java`,这样Maven就会在这个路径下...

    maven 3.5.2 资源包

    总的来说,Maven 3.5.2 资源包为开发者提供了一套完整的构建环境,简化了项目管理和构建流程,通过统一的配置和自动化处理,极大地提高了开发效率。了解并熟练使用Maven,对于任何Java开发者来说都是至关重要的。

    maven多环境部署pom文件实例

    2. **文件夹方式**:创建不同环境的配置文件夹,如`src/main/resources-dev`、`src/main/resources-test`和`src/main/resources-prod`,并使用Maven资源过滤(Resource Filtering)来选择合适的资源文件。...

    Maven安装包(版本:3.5.3)

    2. **更稳定的仓库管理**: 在这个版本中,Maven改进了对远程仓库的错误处理,增强了仓库的可靠性和稳定性。 3. **更好的日志输出**: Maven 3.5.3改进了日志输出,使得开发者更容易理解和诊断构建问题。 4. **增强...

Global site tag (gtag.js) - Google Analytics