在 pom.xml 中定义多个 profile 需将其置于 标签下,每个 profile 必须有唯一 ,推荐显式设置 false,避免属性冲突,并配合资源过滤(true)与 spring boot 的 @env@ 占位符实现构建时配置注入。

怎么在 pom.xml 里定义多个 profile?
Maven 的 profile 不是插件,也不是额外依赖,它就是 pom.xml 里一段可开关的配置块。关键不是“怎么加”,而是“加在哪”和“怎么不冲突”。
- 必须放在
<profiles></profiles> 标签下,不能直接写在 <project></project> 下一级
- 每个
profile 要有唯一 id,比如 dev、test、prod
- 推荐把
activation 写清楚,避免意外激活:用 <activebydefault>false</activebydefault> 显式关闭默认行为
- 不要给不同
profile 配置同一类属性(比如都写 <properties></properties> 里的 db.url),否则打包时可能覆盖混乱
<profiles>
<profile>
<id>dev</id>
<properties>
<env>development</env>
<db.url>jdbc:h2:mem:devdb</db.url>
</properties>
</profile>
</profiles>为什么 mvn clean package -Ptest 没生效?
最常见原因是:你改了 profile 里的 <properties></properties>,但代码里没读它;或者用了 resources 过滤却没开 filtering。
- Java 代码里读不到
pom.xml 的 properties,得靠资源过滤 + 占位符替换(如 ${db.url})写进 application.properties
- 确保
src/main/resources 下的配置文件开启了 filtering:<resource><filtering>true</filtering></resource>
-
-P 参数只激活 profile,不会自动触发资源复制或属性替换——得配合 process-resources 阶段(通常 package 已包含)
- 如果用了 Spring Boot,别只依赖
profile,还要在 application.yml 里配 spring.profiles.active=@env@,并确保 maven-resources-plugin 版本 ≥ 3.1.0(老版本不支持 @xxx@ 语法)
profile 和 Spring Boot 的 spring.profiles.active 是啥关系?
它们完全独立,但能配合用。Maven profile 控制构建时注入哪些值,Spring Profile 控制运行时加载哪些 Bean 或配置。
- Maven 的
dev profile 可以把 application-dev.yml 打包进去,并通过 <filters></filters> 替换其中的数据库地址
- Spring 的
spring.profiles.active=dev 是运行时决定加载哪个 application-{xxx}.yml
- 容易踩坑的是:把两者混为一谈,比如以为激活 Maven
-Pprod 就等于 Spring 自动切到 prod 环境——其实不会,除非你在 application.yml 里写死 spring.profiles.active=prod,或用 Maven 过滤动态写入
- 更稳妥的做法:Maven profile 只负责生成最终的
application.yml,里面已含正确的 spring.profiles.active 值,运行时不再依赖外部参数
多环境配置容易漏掉的点
不是所有配置都能被 profile 覆盖,有些地方必须手动检查:
-
src/test/resources 下的测试配置不会被主 profile 影响,得单独配 testResources 或用 test profile
- 外部化配置(如
application.properties 放在 jar 包外)会绕过 Maven filtering,此时 profile 注入的值根本不起作用
- IDE(如 IntelliJ)默认不识别
-P,运行 Spring Boot 启动类时,得手动在 Run Configuration 里填 spring.profiles.active=dev,否则读的是默认配置
- 如果用了 Docker,
ENTRYPOINT 或 CMD 里没传 --spring.profiles.active,容器启动后还是用默认 profile
<profiles></profiles> 标签下,不能直接写在 <project></project> 下一级 profile 要有唯一 id,比如 dev、test、prod activation 写清楚,避免意外激活:用 <activebydefault>false</activebydefault> 显式关闭默认行为 profile 配置同一类属性(比如都写 <properties></properties> 里的 db.url),否则打包时可能覆盖混乱 mvn clean package -Ptest 没生效?
最常见原因是:你改了 profile 里的 <properties></properties>,但代码里没读它;或者用了 resources 过滤却没开 filtering。
- Java 代码里读不到
pom.xml的properties,得靠资源过滤 + 占位符替换(如${db.url})写进application.properties - 确保
src/main/resources下的配置文件开启了 filtering:<resource><filtering>true</filtering></resource> -
-P参数只激活 profile,不会自动触发资源复制或属性替换——得配合process-resources阶段(通常package已包含) - 如果用了 Spring Boot,别只依赖
profile,还要在application.yml里配spring.profiles.active=@env@,并确保maven-resources-plugin版本 ≥ 3.1.0(老版本不支持 @xxx@ 语法)
profile 和 Spring Boot 的 spring.profiles.active 是啥关系?
它们完全独立,但能配合用。Maven profile 控制构建时注入哪些值,Spring Profile 控制运行时加载哪些 Bean 或配置。
- Maven 的
dev profile 可以把 application-dev.yml 打包进去,并通过 <filters></filters> 替换其中的数据库地址
- Spring 的
spring.profiles.active=dev 是运行时决定加载哪个 application-{xxx}.yml
- 容易踩坑的是:把两者混为一谈,比如以为激活 Maven
-Pprod 就等于 Spring 自动切到 prod 环境——其实不会,除非你在 application.yml 里写死 spring.profiles.active=prod,或用 Maven 过滤动态写入
- 更稳妥的做法:Maven profile 只负责生成最终的
application.yml,里面已含正确的 spring.profiles.active 值,运行时不再依赖外部参数
多环境配置容易漏掉的点
不是所有配置都能被 profile 覆盖,有些地方必须手动检查:
-
src/test/resources 下的测试配置不会被主 profile 影响,得单独配 testResources 或用 test profile
- 外部化配置(如
application.properties 放在 jar 包外)会绕过 Maven filtering,此时 profile 注入的值根本不起作用
- IDE(如 IntelliJ)默认不识别
-P,运行 Spring Boot 启动类时,得手动在 Run Configuration 里填 spring.profiles.active=dev,否则读的是默认配置
- 如果用了 Docker,
ENTRYPOINT 或 CMD 里没传 --spring.profiles.active,容器启动后还是用默认 profile
dev profile 可以把 application-dev.yml 打包进去,并通过 <filters></filters> 替换其中的数据库地址 spring.profiles.active=dev 是运行时决定加载哪个 application-{xxx}.yml -Pprod 就等于 Spring 自动切到 prod 环境——其实不会,除非你在 application.yml 里写死 spring.profiles.active=prod,或用 Maven 过滤动态写入 application.yml,里面已含正确的 spring.profiles.active 值,运行时不再依赖外部参数 profile 覆盖,有些地方必须手动检查:
-
src/test/resources下的测试配置不会被主profile影响,得单独配testResources或用testprofile - 外部化配置(如
application.properties放在 jar 包外)会绕过 Maven filtering,此时 profile 注入的值根本不起作用 - IDE(如 IntelliJ)默认不识别
-P,运行 Spring Boot 启动类时,得手动在 Run Configuration 里填spring.profiles.active=dev,否则读的是默认配置 - 如果用了 Docker,
ENTRYPOINT或CMD里没传--spring.profiles.active,容器启动后还是用默认 profile
事情说清了就结束
系统优势: 全DIV+CSS模板,多浏览器适应,完美兼容IE6-IE8,以及Firefox Opera 等符合标准的浏览器,模板样式集中在一个CSS文件中,内容与样式完全分离,方便网站设计人员开发模板与管理。系统较为安全,以设计防注入,敏感字符屏蔽。新闻,产品,单页独立关键字设计,提高搜索引擎收录。 调试环境必须为IIS 后台账户密码:admin功能介绍:基本信息设置:网站名称,联系人等信息









