【Maven】资源过滤,纯新手向教程,带你搞懂什么是资源过滤

一、资源过滤是什么?(就像“填空题”)

想象你有一个作业模板,里面有些空格需要填答案,比如:

我的名字叫______,
今天天气是______。

资源过滤的作用:Maven在打包时,能自动用实际值填上这些空格(替换占位符)。例如:将${name}替换成张三${weather}替换成晴天


二、资源过滤的3个核心步骤(手把手操作)

1️⃣ 定义变量(设置答案)

pom.xml中设置变量,例如:

<properties>
    <database.url>jdbc:mysql://localhost:3306/testdatabase.url>
    <app.version>1.0.0app.version>
properties>

这里定义了两个变量:database.urlapp.version

2️⃣ 在资源文件中挖空(留填空题)

src/main/resources目录下的配置文件(如application.properties)中写占位符:

# application.properties
db.url=${database.url}
version=${app.version}
3️⃣ 开启过滤(告诉Maven要做填空题)

pom.xml中配置资源过滤:

<build>
    <resources>
        <resource>
            <directory>src/main/resourcesdirectory>
            <filtering>truefiltering>  
        resource>
    resources>
build>
运行效果

执行mvn package后,生成的target/classes/application.properties文件内容变为:

db.url=jdbc:mysql://localhost:3306/test
version=1.0.0

三、结合Profile实现多环境配置(开发/生产环境切换)

1️⃣ 定义不同环境的变量

pom.xml中设置多个Profile:

<profiles>
    
    <profile>
        <id>devid>
        <properties>
            <db.url>jdbc:mysql://localhost:3306/dev_dbdb.url>
        properties>
        <activation>
            <activeByDefault>trueactiveByDefault>  
        activation>
    profile>
    
    
    <profile>
        <id>prodid>
        <properties>
            <db.url>jdbc:mysql://prod-server:3306/prod_dbdb.url>
        properties>
    profile>
profiles>
2️⃣ 打包时指定环境
# 打包开发环境(默认)
mvn package 

# 打包生产环境
mvn package -P prod

生成的配置文件会根据环境自动替换${db.url}的值


四、常见问题与避坑指南

1️⃣ 占位符冲突问题
  • 问题:Spring Boot也用${},会和Maven冲突。
  • 解决:修改Maven占位符为@变量名@
    <properties>
        <resource.delimiter>@resource.delimiter> 
    properties>
    
    资源文件中用@db.url@代替${db.url}
2️⃣ 过滤指定文件

只处理.properties文件,忽略其他:

<resource>
    <directory>src/main/resourcesdirectory>
    <filtering>truefiltering>
    <includes>
        <include>**/*.propertiesinclude> 
    includes>
resource>
3️⃣ 变量未替换?检查这些!
  • 是否开启了true
  • 变量名是否拼写一致(区分大小写)
  • 是否在正确的Profile中定义了变量

五、完整案例演示

1️⃣ 项目结构
my-project/
├── src/
│   └── main/
│       └── resources/
│           └── config.properties
└── pom.xml
2️⃣ config.properties内容
[email protected]@
[email protected]@
3️⃣ pom.xml关键配置
<project>
    <name>MyAppname>
    <properties>
        <resource.delimiter>@resource.delimiter>
        <db.url>default-urldb.url>
    properties>

    <profiles>
        <profile>
            <id>devid>
            <properties>
                <db.url>jdbc:mysql://dev-server:3306/devdb.url>
            properties>
        profile>
    profiles>

    <build>
        <resources>
            <resource>
                <directory>src/main/resourcesdirectory>
                <filtering>truefiltering>
            resource>
        resources>
    build>
project>
4️⃣ 打包命令与结果
mvn package -P dev

生成的config.properties

app.name=MyApp
jdbc.url=jdbc:mysql://dev-server:3306/dev

六、总结:资源过滤的价值

  • 环境隔离:一套代码适配多环境
  • 自动化:避免手动修改配置文件
  • 安全:敏感配置(如密码)可通过外部文件注入19

你可能感兴趣的:(maven,android,java)