maven之---资源过滤 在java/main/resourse/*.xml ,*.properties引用maven属性${db.username}
本文主要来源maven实战14.3
为了应对环境的变化,首先使用Maven属性将这个会发生变化的部分提取出来.在上一节的数据库配置中,连接数据库使用的驱动类,URL,用户名和密码都可能发生变化,因此使用Maven属性取代他们:
database.jdbc.driverClass=${db.driver} database.jdbc.connectionURL=${db.url} database.jdbc.username=${db.username} database.jdbc.password=${db.password}
z放到src/main/resources/*.properites
既然使用了Maven属性,就应该在某个地方定义他们.用一个额外的profile将maven属性包裹其中,代码如下
<profiles> <profile> <id>dev</id> <properties> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql://192.168.1.100:3306/test</db.url> <db.username>dev</db.username> <db.passeord>dev-pwd</db.password> </properties> </profile> </profiles>
代码中的Maven属性定义与直接在POM的properties元素下定义并无二致,这里只是使用了一个id为dev的profile,其目的是将开发环境下的配置与其他环境区别开来.关于profile,本章将详细解释
有了属性定义,配置文件中也使用了这些属性,一切就OK了吗>还不行.要留意的是Maven属性默认只有在POM中才会被解析,也就是说,${db.username}放到POM中会变成test,但是如果放到src/main/resources/目录下的文件中,构建的时候他讲仍然还是${db.usrname}.因此,需要让Maven解析资源文件(resources目录)中的Maven属性.
资源文件的处理其实是maven-resources-plugin做的事情,它的默认行为只是将项主资源文件复制到主代码编译输出目录中,不过只要通过一些简单的POM配置,该插件就能够解析资源文件中的Maven属性,即开启资源过滤,只要在此基础上添加乙方filtering配置即可,代码如下:
<resources> <resource> <directory>${project.basedir}/sr/main/resources<directory> <filtering>true</filtering> </resource> <resources>
目前一切就绪,在POM的profile中定义了这些属性的值,并且为资源目录开启了属性过滤.最后,只要在命令行激活profile,Maven就能在构建项目的时候使用profile中属性值替换数据库配置文件中的属性引用.命令如下
mvn clean install -Pdev