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


    需求:由于最近开发clover项目 ,没有使用spring,更没有使用任何框架,而使用J2EE的web工程,所以连接ZK和MongoDBRedis等服务器需用指定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:

  • 相关阅读:
    记忆点
    数组的操作
    console.log()中的运算与打印事件
    ie9上传后下载json
    mysql使用on duplicate key update批量更新数据
    vue 弹出菜单
    mysql备份脚本
    uniapp+nodejs微信支付小程序版
    mycat初体验
    vscode格式化html标签属性不换行(vetur插件)
  • 原文地址:https://www.cnblogs.com/exmyth/p/7156289.html
Copyright © 2020-2023  润新知