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

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

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

而目前公司又分各套环境(dev、test、product),所以希望打包的时候 根据profile id 来动态使用不同环境properties文件 或者动态修改properties参数值

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

maven 根据P参数值打包动态修改properties文件中值或一定properties_第1张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第2张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第3张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第4张图片

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

maven 根据P参数值打包动态修改properties文件中值或一定properties_第5张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第6张图片

我们还要启动resources的filter过滤器:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第7张图片

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

maven 根据P参数值打包动态修改properties文件中值或一定properties_第8张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第9张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第10张图片

我们可以看到mongoDBConfig.properties、redisConfig.properties、zkConfig.properties等文件都被替换到指定环境的参数了

由于 有些老系统会在项目中的resources下指定各套环境配置文件,如下图片:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第11张图片

但是我们打包后 只希望将指定环境下的*.properties文件都移动到classes下,所以可以考虑使用方法二

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

我们只在打包dev环境:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第12张图片

我们要指定resources.dir目录为src/main/resources/dev
maven 根据P参数值打包动态修改properties文件中值或一定properties_第13张图片

我们增加一个plugin 为maven-antrun-plugin,由于我只要在子工程clover-core下面移动这几个文件,最终打成一个jar包,所以要把这个plugin代码放在clover-core下的pom.xml文件,如果把这个plugin放在父工程的pom.xml下那就移动所有的子工程下resources文件

maven 根据P参数值打包动态修改properties文件中值或一定properties_第14张图片

还是贴上代码吧:

 

<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>

 

 

我们执行打包后:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第15张图片

我们可以看到clover-core下已经将这几个*.properties移动到classes下了

个人还是比较推荐第一种方式

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

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

maven 根据P参数值打包动态修改properties文件中值或一定properties_第16张图片

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

maven 根据P参数值打包动态修改properties文件中值或一定properties_第17张图片

 

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

 

 

我们执行打包后:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第18张图片私库

maven 根据P参数值打包动态修改properties文件中值或一定properties_第19张图片

当我们打war包的时候,我们也可以指定依赖模块的版本号:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第20张图片

我们这里面使用的 profile配置的环境version,但让你想自己改成别的版本,你打包后就可以看到某个依赖的jar包就是你指定的版本

我们把clover-core的版本改成dev-1.0 

maven 根据P参数值打包动态修改properties文件中值或一定properties_第21张图片

再把clover-core的pom.xml 

maven 根据P参数值打包动态修改properties文件中值或一定properties_第22张图片

打包后 我们看下war包中:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第23张图片

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

maven 根据P参数值打包动态修改properties文件中值或一定properties_第24张图片

原来是这样的

你可能感兴趣的:(maven 根据P参数值打包动态修改properties文件中值或一定properties)