想象你有一个作业模板,里面有些空格需要填答案,比如:
我的名字叫______,
今天天气是______。
资源过滤的作用:Maven在打包时,能自动用实际值填上这些空格(替换占位符)。例如:将${name}
替换成张三
,${weather}
替换成晴天
。
在pom.xml
中设置变量,例如:
<properties>
<database.url>jdbc:mysql://localhost:3306/testdatabase.url>
<app.version>1.0.0app.version>
properties>
这里定义了两个变量:database.url
和app.version
在src/main/resources
目录下的配置文件(如application.properties
)中写占位符:
# application.properties
db.url=${database.url}
version=${app.version}
在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
在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>
# 打包开发环境(默认)
mvn package
# 打包生产环境
mvn package -P prod
生成的配置文件会根据环境自动替换${db.url}
的值
${}
,会和Maven冲突。@变量名@
:<properties>
<resource.delimiter>@resource.delimiter>
properties>
资源文件中用@db.url@
代替${db.url}
只处理.properties
文件,忽略其他:
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
<includes>
<include>**/*.propertiesinclude>
includes>
resource>
true
my-project/
├── src/
│ └── main/
│ └── resources/
│ └── config.properties
└── pom.xml
[email protected]@
[email protected]@
<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>
mvn package -P dev
生成的config.properties
:
app.name=MyApp
jdbc.url=jdbc:mysql://dev-server:3306/dev