maven resources与配置分离

目录

  • 1. resources简介
  • 2. directory
  • 3. exclude
  • 5. filtering
  • 6. include
  • 7. 参考

1. resources简介

maven的resources默认使用的插件是maven-resources-plugin,主要是用于执行资源文件拷贝。

我们先看一个示例,然后在一一介绍。

<build>
    <resources>
        <resource>
            <directory>src/main/resourcesdirectory>
            <excludes>
                <exclude>config/**exclude>
            excludes>
            <filtering>truefiltering>
        resource>
        <resource>
            <directory>src/main/resources/config/${pkg.env}directory>
            <includes>
                <include>config.mybatis.xmlinclude>
            includes>
            <filtering>falsefiltering>
        resource>
    resources>
build>

maven resources与配置分离_第1张图片

2. directory

directory目录是指定资源文件位置,默认是src/main/resources目录,一般我们不配置这个,默认就是把src/main/resources目录下的所有文件都拷贝。

3. exclude

exclude的是排除文件、目录。

<resource>
    <directory>src/main/resourcesdirectory>
    <excludes>
        <exclude>config/**exclude>
    excludes>
    <filtering>truefiltering>
resource>

例如我们把不同环境的配置文件都放在config目录下,打包的时候按需拷贝。

因为默认会拷贝src/main/resources下的所有目录和文件,所有只需要配置exclude:config/**,表示排除config目录及其子目录及文件。

5. filtering

filtering是用参数替换占位符的过程,必须和filters一起使用。

<build>
    <filters>
        <filter>src/main/resources/config/dev/application-dev.propertiesfilter>
    filters>
build>

什么意思呢?例如:

application.properties文件中有一个配置项

jdbc.url=${dev.jdbc.url}

filter文件application-dev.properties也有相同配置项:

dev.jdbc.url=jdbc:mysql://127.0.0.1:3306/test

拷贝文件application.properties时,如果filtering为true

application.properties文件中的${dev.jdbc.url}占位符就会被替换,变为:

jdbc.url=jdbc:mysql://127.0.0.1:3306/test

注意:

如果使用SpringBoot,应该把${dev.jdbc.url}替换为@dev.jdbc.url@

通常,filtering会和profile配合一起使用,不同环境激活不同的配置文件,从而实现配置分离。

<profiles>
    <profile>
        <id>devid>
        <activation>
            <activeByDefault>trueactiveByDefault>
        activation>
        <build>
            <filters>
                <filter>src/main/resources/config/dev/application-dev.propertiesfilter>
            filters>
        build>
    profile>
    <profile>
        <id>proid>
        <build>
            <filters>
                <filter>src/main/resources/config/pro/application-pro.propertiesfilter>
            filters>
        build>
    profile>
profiles>

6. include

如果像mybatis的配置文件,里面有大量properties,我们也通过filtering来替换吗?

显然,这样不太合适。这个时候,我们可以直接拷贝文件。

<resource>
    <directory>src/main/resources/config/${pkg.env}directory>
    <includes>
        <include>config.mybatis.xmlinclude>
    includes>
    <filtering>falsefiltering>
resource>

directory配置到指定目录,表示要从这个目录拷贝文件。include表示要拷贝的文件,因为不是src/main/resources目录,所以,只会拷贝include配置的文件。

${pkg.env}配置在profile的properties中,这样,就可以拷贝指定环境的文件。

<profiles>
    <profile>
        <id>devid>
        <activation>
            <activeByDefault>trueactiveByDefault>
        activation>
        <properties>
            <pkg.env>devpkg.env>
        properties>
    profile>
    <profile>
        <id>proid>
        <properties>
            <pkg.env>propkg.env>
        properties>
    profile>
profiles>

7. 参考

include-exclue

filter

resource插件示例

你可能感兴趣的:(Tool,maven,配置分离,resources,maven,profile)