You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ运行应用时实际生效的是哪个Maven Profile?

核心问题说明

你的配置存在两处错误

  • 依赖scope配置错误:你在Dev Profile里给spring-boot-starter-tomcat配置了<scope>provided</scope>,这个scope的作用是标记依赖仅参与编译、测试阶段,不会被加入运行时类路径。本地通过IDEA直接启动Spring Boot嵌入式容器的时候,JVM找不到Tomcat相关的类,自然启动失败。

注:provided scope的设计场景是打WAR包部署到外部Tomcat时使用——外部容器本身已经提供了Tomcat核心类,不需要应用包里再带一份嵌入式Tomcat造成类冲突,才会把这个依赖设为provided。本地用嵌入式Tomcat跑调试的场景,这个依赖必须用默认的compile scope(也就是去掉scope标签,Maven默认scope就是compile),才能在运行时正常加载。

  • 对IDEA的Profile生效逻辑理解有误:IDEA右侧Maven面板里的Profile勾选状态,仅对通过Maven面板执行的命令(比如package、install、deploy,或者手动执行mvn命令)生效,和右上角绿色运行按钮启动应用时的运行配置是两套独立的配置,不会自动同步。

IDEA点击运行按钮时实际生效的Maven Profile

默认情况下,如果你没有手动修改过启动类对应的运行/调试配置,只会激活pom.xml中标记了<activeByDefault>true</activeByDefault>的默认Profile,不会自动加载你在Maven面板勾选的Dev Profile。
要让Dev Profile在点击运行时生效,需要手动修改对应运行配置:

  1. 点击右上角运行配置下拉框,选择「编辑配置」
  2. 找到你用来启动Spring Boot的对应配置项,在配置页中找到Maven Profile相关的设置项,手动指定激活Dev Profile
  3. 更稳妥的调试方式是直接创建Maven类型的运行配置,执行命令spring-boot:run -P dev,这种方式会严格按照-P参数指定的Profile加载依赖,不会出现配置不同步的问题

修正后的配置参考

Dev Profile下的Tomcat依赖去掉provided scope即可:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!-- 删掉scope标签,默认compile scope,运行时可见 -->
</dependency>

如果Prod环境是打WAR包部署外部Tomcat,可以在Prod Profile中配置该依赖为provided scope,或者直接排除该依赖,避免和外部容器的Tomcat包冲突。
配置修改完成后记得点击Maven面板的刷新按钮重新导入依赖,再启动应用即可正常运行。


内容的提问来源于stack exchange,提问作者microwth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:39:20