maven 根据P参数值打包动态修改properties文件中值或必定properties

因为本人 最近忙着公司事情,昨天没有写博客,今天就继续写吧web

需求:因为最近开发clover项目 ,没有使用spring,更没有使用任何框架,而使用J2EE的web工程,因此链接ZK和MongoDB、Redis等服务器需用指定properties文件,redis

而目前公司又分各套环境(dev、test、product),因此但愿打包的时候 根据profile id 来动态使用不一样环境properties文件 或者动态修改properties参数值spring

方法一:使用一套properties配置文件,但具体参数使用${key}占位符方式打包替换apache





maven的pom中指定每套环境的参数值服务器



咱们还要启动resources的filter过滤器:框架


按照上述配置后,咱们执行maven打包操做后:maven


咱们能够看到mongoDBConfig.properties、redisConfig.properties、zkConfig.properties等文件都被替换到指定环境的参数了ui

因为 有些老系统会在项目中的resources下指定各套环境配置文件,以下图片:spa


可是咱们打包后 只但愿将指定环境下的*.properties文件都移动到classes下,因此能够考虑使用方法二插件

方法二:使用maven-antrun-plugin插件方式实现

咱们只在打包dev环境:

咱们要指定resources.dir目录为src/main/resources/dev

咱们增长一个plugin 为maven-antrun-plugin,因为我只要在子工程clover-core下面移动这几个文件,最终打成一个jar包,因此要把这个plugin代码放在clover-core下的pom.xml文件,若是把这个plugin放在父工程的pom.xml下那就移动全部的子工程下resources文件


仍是贴上代码吧:

<build>    <finalName>clover-core-${clover.version}</finalName>    <plugins>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-antrun-plugin</artifactId>            <executions>                <execution>                    <id>compile</id>                    <phase>compile</phase>                    <configuration>                        <tasks>                            <echo message="********************** copy resources to classpath*************************"/>                            <echo message="********************** copy ${resources.dir} to classpath*************************"/>                            <copy todir="target/classes" overwrite="true">                                <fileset dir="${resources.dir}">                                    <include name="*.*"/>                                    <include name="*/*.*"/>                                </fileset>                            </copy>                        </tasks>                    </configuration>                    <goals>                        <goal>run</goal>                    </goals>                </execution>            </executions>        </plugin>    </plugins>    <resources>        <resource>            <directory>src/main/resources</directory>            <filtering>true</filtering>        </resource>    </resources></build>


咱们执行打包后:


咱们能够看到clover-core下已经将这几个*.properties移动到classes下了

我的仍是比较推荐第一种方式

PS:有的时候 咱们想经过动态打包,生成的子工程的名字是带各套环境, 好比:clover-core-dev-1.0.jar

咱们在父工程的profile下设置clover.version


子工程clover-core想最终打包是clover.version指定的环境+版本号:


<version>${clover.version}</version>  ---这个将会打包后deploy中央私库后最终的version
<finalName>clover-core-${clover.version}</finalName> --这个就是子工程clover-core打包最终名字


咱们执行打包后:

私库


当咱们打war包的时候,咱们也能够指定依赖模块的版本号:


咱们这里面使用的 profile配置的环境version,但让你想本身改为别的版本,你打包后就能够看到某个依赖的jar包就是你指定的版本

咱们把clover-core的版本改为dev-1.0 


再把clover-core的pom.xml 


打包后 咱们看下war包中:


但我看下clover-core子工程下的target:


原来是这样的

maven用的时间却是很长,但大多时间都是一次配置后,再没有修改后,而后开发项目,但有些细节 最终没有研究那么明白

文章写的有点水,但愿对您受用,谢谢

相关文章
相关标签/搜索