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

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

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

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

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

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

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

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

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

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

但是我们打包后 只希望将指定环境下的*.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用的时间倒是很长,但大多时间都是一次配置后,再没有修改后,然后开发项目,但有些细节 最终没有研究那么明白

文章写的有点水,希望对您受用,谢谢

时间: 2024-11-05 12:20:51

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

动态修改css文件中,具体的class中的个别属性值。

//修改class的属性值 //javascript方式 function setCssClassProperty(pSheetObj,pClassName,pProperty,pValue) { var rules = pSheetObj.sheet.cssRules; var rule; var selectorText; for (i = 0; i < rules.length; i++) { rule = rules[i]; selectorText = rule.selectorTex

js 动态修改css文件

_.find(document.styleSheets[4].cssRules,function(cssRule){ if(cssRule.selectorText && cssRule.selectorText.indexOf(".navbar-fixed-top2")>-1){ cssRule.style.position=""; cssRule.style.top = "0px"; } if(cssRule.selec

Android 使用Log4j把日志写入SD卡,动态修改输出文件名称

一.Log4j简单使用 1. 下载log4j.jar http://logging.apache.org/log4j/2.x/ 2. 创建Java代码 public class Loggers { public static Logger logger = Logger. getLogger(Loggers. class); public static void init() { try { PatternLayout patternLayout = new PatternLayout(); p

ASP.NET MVC程序中动态修改form的Action值

在练习ASP.NET MVC时,为了实现一个小功能,POST数据至服务器执行时,需要动态修改form的action值. 下面Insus.NET列举一个例子来演示它.让它简单,明白易了解. 你可以在控制器中,创建3个操作action: 标记1是实现视图,而标记2与3是为form的action.其中Isus.NET有使用ContentResult来替代Response.Write向视图输出结果. 在视图中,我们在form中,放一个文件框,两个铵钮,但没有在form中,设置action值.稍后我们在铵

来篇文章:ASP。NET程序中动态修改web.config中的设置项目 (后台CS代码)

朋友们可以自行测试,我这里都没有问题了,鳖了一上午的问题总算解决了 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; usi

ASP.NET MVC 动态修改form的action值

在练习ASP.NET MVC时,为了实现一个小功能,POST数据至服务器执行时,需要动态修改form的action值. 下面Insus.NET列举一个例子来演示它.让它简单,明白易了解. 你可以在控制器中,创建3个操作action: 标记1是实现视图,而标记2与3是为form的action.其中Isus.NET有使用ContentResult来替代Response.Write向视图输出结果. 在视图中,我们在form中,放一个文件框,两个铵钮,但没有在form中,设置action值.稍后我们在铵

向properties文件中写入信息(针对获取properties文件失败的总结)

前段时间项目需要将某个属性动态的写入项目发布路径下的properties文件中;但是实际发布时发现找不到maven项目resource路径下的project.properties文件,调试多次代码如下: /** * 写入properties信息 * * @param key 名称 * @param value 值 */ public static void modifyConfig(String key, String value) { try { // 从输入流中读取属性列表(键和元素对) P

读取properties文件中的内容

看情况有时候某些属性值在很多地方要用,而且可能会有改动,就可以把它们存在properties文件中. 当然也可以准备一个静态类来放. //调用方法的静态代码块 private static String getStr = ""; static { try { Properties properties = PropertiesUtil.readProperties("sys.properties"); //Str是文件中配置的名字部分 //例:文件中存了几个属性,其

SpringMVC+HibernateValidator,配置在properties文件中的错误信息回显前端页面出现中文乱码

问题: 后台在springMVC中使用hibernate-validator做参数校验的时候(validator具体使用方法见GOOGLE),用properties文件配置了校验失败的错误信息.发现回显给前端页面的时候中文错误信息显示乱码. 封装参数的POJO类 public class UserReqBean { @NotNull(message="{user.name.notnull}") private String userName; } ValErrMsg.propertie