在JavaWeb项目中,使用maven打包。在打正式包时,需要手动修改数据库配置为线上环境的地址,这样每次修改起来比较麻烦。

搜索了一些资料后,大部分的做法或原理都是预先使用表达式占位符,然后在打包时动态替换。

但这种做法无法满足我直接在开发环境(Eclipse+Tomcat)里面直接测试,因为配置文件里面的值是表达式而不是真正的值。所以综合一些资料有个以下解决办法。

  1. 正常配置的数据库配置为测试环境的地址
  2. maven打包时动态替换配置文件

项目结构图如下

具体实现

  • 在开发环境中测试时使用图中测试的数据库配置
  • maven打包时利用ant插件,使用classpath:product/jdbc.properties替换classpath:jdbc.properties,具体做法是在pom.xml中做如下配置
    <profiles>
<profile>
<id>prod</id> <!--指定ID-->
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<!-- 替换jdbc.properties-->
<copy file="${basedir}/src/main/resources/product/jdbc.properties" tofile="${basedir}/target/classes/jdbc.properties" overwrite="true"/>
<delete dir="${basedir}/target/classes/product"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
  • 打包时指定profile,打包命令为: mvn clean package -P prod

总结

这种的做法同样也可以替换其他相关配置,比如log4j相关的配置。

Maven之打包时配置文件替换的更多相关文章

  1. maven 打包时动态替换properties资源文件中的配置值

    pom build节点下面添加resource配置: <resources> <resource> <directory>src/main/resources/&l ...

  2. maven 项目打包时无法解析读取properties文件

    在做项目时遇见一个问题,无法解析properties文件的 内容 异常为 Could not resolve placeholder ......... 在此之前均有做相关的 配置 但是从未出现过如上 ...

  3. 避免maven package 打包时执行 mybatis-generator-maven-plugin 插件

    一.为什么打包时会执行该插件mybatis-generator-maven-plugin默认绑定了package的生命周期 二.如何解决如果在package和install 执行插件,修改pom中的配 ...

  4. Maven项目打包时指定配置策略

    以数据库连接池的配置文件(db.properties)为例,一般的项目会有开发用数据库,测试用数据库,正式环境数据库三种配置. 以前的做法是拷贝成三份,注释掉其他了两份 # 开发用 jdbc.url ...

  5. maven项目打包时生成dependency-reduced-pom.xml

    今天给maven项目打jar包,发现在pom.xml文件的同路径下,突然生出了一个dependency-reduced-pom.xml,也不知道这个文件是干什么的,看着别扭就想着删除了它. 后来知道是 ...

  6. maven 编译打包时,明明类文件没有问题,却提示错误:未结束的字符串字面值,maven-compiler-plugin:2.3.2

    maven错误提示如下: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (de ...

  7. Maven 编译打包时如何忽略测试用例

    跳过测试阶段: mvn package -DskipTests 临时性跳过测试代码的编译: mvn package -Dmaven.test.skip=true maven.test.skip同时控制 ...

  8. maven 学习---Maven 编译打包时如何忽略测试用例

    本文地址:http://blog.csdn.net/wirelessqa/article/details/14057305 跳过测试阶段: mvn package -DskipTests 临时性跳过测 ...

  9. Idea中使用Maven编码打包时中文乱码的解决办法

    -Dfile.encoding=GBK

随机推荐

  1. TFS与Eclipse、Microsoft Visual Studio等客户端以webservice进行交换。

    TFS与eclipse.Microsoft Visual Studio等客户端以webservice进行交互. 参考地址: http://server_ip:8080/tfs/项目区域/version ...

  2. Linux内核同步机制--转发自蜗窝科技

    Linux内核同步机制之(一):原子操作 http://www.wowotech.net/linux_kenrel/atomic.html 一.源由 我们的程序逻辑经常遇到这样的操作序列: 1.读一个 ...

  3. 【html/css】html/css命名规范

    无论做什么,规则总是最重要的.无规矩不成方圆,有了规矩,我们才能有规可循,有则可依,人与人之间才能正常的交流交往. 人人都有自己的命名习惯,不过,代码是需要交流的,当有些命名习惯仅只自己能看懂,甚至自 ...

  4. Swift 遍历数组元素

    ..<Array.count { Array[index] } for (index, element) in Array.enumerate() { print(("\(index+ ...

  5. jetty 最后版本类库树, 基本上大多数应用都够了

    d:\jetty-distribution-8.1.17.v20150415\lib\annotations\javax.annotation-1.1.0.v201108011116.jarjavax ...

  6. Browser默认书签加载过程

    Browser配置默认书签——string.xml中<string-array name="bookmarks" translatable="false" ...

  7. 使用multipart请求处理文件上传

    在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石——Spring MVC其中的一个优势.Spring通过对Serv ...

  8. C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区

    栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等.在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用.和堆一样 ...

  9. Linux分区,并且把新的分区挂载到指定的文件夹

    本教程为在已使用的Linux系统中新加入一个硬盘. 1.fdisk –l 查看:看到新加入硬盘hdd 2.输入:fdisk /dev/hdd 3.键入m查看有哪些命令: 4.键入p查看一下硬盘hdd的 ...

  10. js页面刷新、前进、后退

    1.使用按钮 <input type=button value=刷新 onclick="window.location.reload()"> <input typ ...