文档章节

根据环境打包资源文件

learn_more
 learn_more
发布于 2016/04/13 12:38
字数 1320
阅读 82
收藏 3

1、背景

互联网和以前的模式是有区别的,以前我们都是给每个公司搭建一套系统,买产品那就是还有买一整套的服务器硬件等,然后在内部网络搭建系统,可是现在互联网则不一样了,我们只有一套系统,客户要买我们的产品,我们也只是卖服务而已,所有客户都使用一套系统,因为权限和位置不同所以只能看到自己的数据。对于以前的部署方式,因为有很多客户,每个客户的环境都不一样,如果我们项目的配置文件是写在项目内部的话,那么要根据不同的客户打不同的包,这个太麻烦了,所以就把配置文件ini放在了某个固定的路径下面,使配置文件和项目解耦,客户可以自己使用配置文件配置;回到现在,因为我们项目部署在云端,一般情况下就部署一处搞定,然后再细分环境就是 生产环境、测试环境、开发环境,所以只要根据这3个不同的环境打3次包即可,那么就没必要把配置文件放在项目外部了,而是放在项目内部,使用项目 Maven 管理。


2、分析

使用Maven根据不同环境打包,maven项目都会有 src/main/java  src/main/resources

前者存放的是java源文件,默认打包在 classes 目录下面,但是如果该目录下面还有非java的文件,系统默认是不会打包的,这个时候除非自己指定POM文件打包规则

后面存放的是配置文件,同样maven默认打包在classes目录下,默认是所有文件,所以,如果想要部分文件不打包,你们也要自己指定POM文件打包规则。


3、实现

规则——核心资源过滤

1)项目目录结构

src/main/java

    |-LoginServlet.java

    |-UserMapper.xml

src/main/resources

    |-config

            |-jdbc.properties

    |-enviroment

            |-dev.properties

            |-product.properties

            |-test.properties


2)jdbc.propertes 文件内容

driverClassName=${driverClassName}

jdbc_url=${jdbc_url}

jdbc_user=${jdbc_user}

jdbc_password=${jdbc_password}


3)修改pom文件

................

<build>

            <!-- 单元测试,忽略 Tests are skipped -->

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-surefire-plugin</artifactId>

                <version>2.5</version>

                <configuration>

                    <skip>true</skip>

                </configuration>

            </plugin>

        <!-- 配置文件,,resources 目录则恰好相反 -->

        <resources>

            <!-- 如果在java目录下有资源文件,需要明确声明打包才能部署到classes目录  -->

            <resource>  

                <directory>src/main/java</directory>  

                <includes>  

                    <include>**/*.properties</include>  

                    <include>**/*.xml</include>  

                </includes>  

                <filtering>false</filtering>  

            </resource> 

             <!-- 如果在resouces目录下有资源文件,需要明确声明打包才能不部署到classes目录  -->

            <resource>

                <directory>src/main/resources</directory>

                <filtering>false</filtering>

                <includes>

                    <include>**/*.*</include>

                </includes>

                <excludes>

                    <exclude>environment/*.properties</exclude>

                </excludes>

            </resource>

            <resource>

                <directory>src/main/resources</directory>

                <filtering>true</filtering>

                <includes>

                    <include>**/*.properties</include>

                </includes>

            </resource>

        </resources>

    </build>

    <!-- 配置选项 dev 开发环境(默认使用),test 测试环境,product 生产环境 -->

    <profiles>

        <profile>

            <id>dev</id>

            <activation>

                <activeByDefault>true</activeByDefault>

            </activation>

            <properties>

                <driverClassName>com.mysql.jdbc.Driver</driverClassName>

                <jdbc_url>jdbc:mysql://localhost:3306/develop</jdbc_url>

                <jdbc_user>learnmore</jdbc_user>

                <jdbc_password>learnmore</jdbc_password>

            </properties>

        </profile>

        <profile>

            <id>product</id>

            <activation>

                <activeByDefault>true</activeByDefault>

            </activation>

            <properties>

                <!-- 使用自定义属性的方式 -->

                <driverClassName>com.mysql.jdbc.Driver</driverClassName>

                <jdbc_url>jdbc:mysql://localhost:3306/product</jdbc_url>

                <jdbc_user>learnmore</jdbc_user>

                <jdbc_password>learnmore</jdbc_password>

            </properties>

        </profile>

        <profile>

            <id>test</id>

            <build>

                <filters>

                    <!-- 使用独立文件的方式 -->

                    <filter>src/main/resources/environment/test.properties</filter>

                </filters>

            </build>

        </profile>

    </profiles>

无论是src/main/java 还是 src/main/resources 他们都可以放资源文件,在pom中都可以设置属性 include 和 exclude ,不要以为 include和exclude就是部署时是否包含,其实还有另外的意思,他们更关键的是配合另一个属性 filtering 使用,filtering 为 true 说明 include 的文件会被资源过滤,也就是这些文件内部的占位符 ${jdbc_url} 会被 profiles 中指定的 properties 替换掉,打包之后你就可以打开war包看到效果。然而打包部署的话,是有默认规则的,就是上面说的,如果是在 src/main/java 目录下,非java文件默认不打包,但是如果在pom中声明要include,那么这部分就会打包;如果是 src/main/resource 目录下,所有的文件都默认打包在classes目录,但是如果在pom中声明要exclude,那么这部分就不打包。看上面的配置你会发现,resources目录下指定了多个 resource ,第一个是用来声明需要部署哪些文件,第二个用来声明哪些文件需要过滤。

4)上面默认是激活dev配置,我们也可以在打包时采用参数激活自定义的文件

mvn clean package

mvn clean package -Pdev

mvn clean package -Pproduct

mvn clean package -Ptest


打包之后,找到war包,然后查看文件,会发现占位符已经被替换。

jdbc.propertes 文件内容

driverClassName=com.mysql.jdbc.Driver

jdbc_url=jdbc:mysql://localhost:3306/product

jdbc_user=learnmore

jdbc_password=learnmore


4、注意

对于profile激活机制还是有很多的,这个可以参考《Mavn实战》

对于maven属性自定义以及系统maven属性,都可以参考 《Mavn实战》


© 著作权归作者所有

上一篇: MySQL 事务学习
下一篇: Tomcat 集群搭建
learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
webpack4打包vue前端多页面项目

之前一直用的脚手架,这次自己搭建webpack前端项目,花费了不少心思,于是做个总结。 1.用法 项目结构如下: public文件夹存放一些静态文件,src文件夹存放源码。每个页面通过一个入口文件(...

comWang
2018/09/17
0
0
前端项目框架搭建随笔---Webpack踩坑记

只知道Webpack怎么拼怎么用的我。。被领导委托搭建移动端项目框架。。。 此时的我: 咱虽然对Webpack一窍不通,也得保持风度 “那个大哥,咱这边移动端用啥UI框架?” “得过几天想想。。搞不...

王圣松
2018/08/24
0
0
如何在webpack中设置favicon--webpack入门教程(四)

在这篇文章中: 0,需求 1,项目实例 2,小结 本文主要想介绍前端webpack打包中,与favicon图标相关的配置。包括在html-webpack-plugin中设置favicon,和自定义favicon的打包路径两个方面。本文...

前端林子
2018/12/01
0
0
浏览器缓存和webpack缓存配置

浏览器缓存 浏览器缓存分为两种类型: 强缓存:也称为本地缓存,不向服务器发送请求,直接使用客户端本地缓存数据 协商缓存:也称304缓存,向服务器发送请求,由服务器判断请求文件是否发生改...

辉卫无敌
2018/07/05
0
0
深入Parcel--架构与流程篇

本篇文章是对 的源码解析,代码基本架构与执行流程,带你了解打包工具的内部原理,在这之前你如果对 不熟悉可以先到 Parcel官网 了解 介绍 下面是偷懒从官网抄下来的介绍: 极速零配置Web应用...

李13
04/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
17分钟前
6
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
29分钟前
3
0
jenkins 插件下载加速最终方案

推荐做法 1、告诉jenkins 我哪些插件需要更新 jenkins插件清华大学镜像地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 1.进入jenkins系统管理 2.进入插件管...

vasks
35分钟前
4
0
composer爆错:zlib_decode():data error

解决办法:先用 composer diagnose 命令检测 然后 composer self-update 更新composer版本 最后执行 composer update 或者 composer install composer 切换阿里云镜像 用起来还快 composer c...

koothon
42分钟前
4
0
shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部