maven-资源文件内容动态替换

maven-资源文件内容动态替换

起男 1,718 2020-11-27

maven-资源文件内容动态替换

资源文件中可以通过${maven属性}来引用maven属性中的值,打包过程中这些会被替换掉,替换的过程默认是不开起的,需要手动开启配置

  1. 修改配置文件内容

    jdbc.url=${jdbc.url} 
    jdbc.username=${jdbc.username} 
    jdbc.password=${jdbc.password}
    
  2. 修改xml文件内容

    <properties> 
        <!-- 指定资源文件复制过程中采用的编码方式 --> 
        <encoding>UTF-8</encoding> 
        <jdbc.url>jdbc:mysql://localhost:3306/javacode2018?characterEncoding=UTF- 8</jdbc.url> 
        <jdbc.username>root</jdbc.username> 
        <jdbc.password>root</jdbc.password> 
    </properties>
    
  3. 开启动态替换配置,需要在pom.xml添加配置

    <build> 
        <resources> 
            <resource> 
                <!-- 指定资源文件的目录 --> 
                <directory>${project.basedir}/src/main/resources</directory> 
                <!-- 是否开启过滤替换配置,默认是不开启的 --> 
                <filtering>true</filtering> 
            </resource> 
        </resources>
    </build>
    

    如果要控制测试资源的话可以使用testResources元素

自定义分隔符

自定义分隔符,需要配置maven-resources-plugin插件的参数:

<plugins> 
    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-resources-plugin</artifactId> 
        <version>2.6</version> 
        <configuration> 
            <!-- 是否使用默认的分隔符,默认分隔符是${*}和@ ,这个地方设置为false,表示不启 用默认分隔符配置--> 
            <useDefaultDelimiters>false</useDefaultDelimiters> 
            <!-- 自定义分隔符 --> 
            <delimiters> 
                <delimiter>$*$</delimiter> 
                <delimiter>#</delimiter> 
            </delimiters> 
        </configuration> 
    </plugin> 
</plugins>

delimiters中可以配置多个delimiter,可以配置#*#,其中的*标识属性名称,那么资源文件中的#属性名#在复制的过程中会被替换掉,*前后都是#,表示前后分隔符都一样,那么可以简写为#,所有#*#和#写法是一样的

delimiters的默认值:

this.delimiters.add("${*}");
this.delimiters.add("@");

修改配置文件:

jdbc.url=${jdbc.url} 
jdbc.username=$jdbc.username$ 
jdbc.password=#jdbc.password#

运行后:

jdbc.url=${jdbc.url} 
jdbc.username=root 
jdbc.password=root

第一个没有被替换因为是否使用默认分隔符为false

指定要替换的资源文件

修改pom.xml中resources元素

<resources> 
    <resource> 
        <!-- 指定资源文件的目录 --> 
        <directory>${project.basedir}/src/main/resources</directory> 
        <!-- 是否开启过滤替换配置,默认是不开启的 --> 
        <filtering>true</filtering> 
        <!-- 列出需要被处理的 -->
        <includes> 
            <include>**/jdbc.properties</include> 
        </includes> 
        <!-- 排除需要被处理资源文件列表 -->
        <excludes> 
            <exclude>**/const.properties</exclude> 
        </excludes> 
    </resource> 
</resources>

**匹配人员深度的文件路径

*匹配人员个字符串