IntelliJ运行Spring Boot应用时使用哪个Maven Profile?
是否存在默认Profile?
不存在你理解层面的"默认Profile"。
- POM中所有没有被
<profiles>标签包裹的依赖、插件配置属于全局公共配置,无论激活Dev、Prod还是不激活任何自定义Profile,这部分配置都会生效,不属于某个默认Profile的内容。 - Maven的Profile只有显式配置了
<activation><activeByDefault>true</activeByDefault></activation>规则时,才会在没有手动指定Profile的场景下自动激活,如果你没给Dev/Prod加这个配置,这两个Profile默认都处于未激活状态。
IntelliJ 点击Run Application的Profile生效规则
- 首先要明确:IDEA默认的「Run Application」启动逻辑(直接点绿色三角运行main类)和Maven构建流程是相互独立的,默认不会执行Maven的生命周期步骤。
- 没有手动修改运行配置的前提下,直接点Run Application启动时,不会激活Dev或Prod任何一个自定义Maven Profile,只会加载POM中的全局公共配置。
- IDEA右侧Maven面板的Profile勾选状态,默认只对Maven命令生效(比如你在面板点击package、install,或者在IDEA内置终端执行
mvn命令时,会按勾选状态激活对应Profile),不会影响普通Application类型的运行配置。除非你手动修改运行配置,将启动前的构建步骤关联到Maven目标,或者在运行配置中显式指定了要激活的Maven Profile,否则勾选状态和Run Application的运行逻辑没有关联。
排除Tomcat后IDEA启动仍加载内嵌Tomcat的原因
这个问题本质是IDEA的运行类路径和你通过Maven命令解析的依赖树不一致导致的,常见原因如下:
- IDEA依赖缓存未同步:修改POM添加Tomcat排除规则后,没有点击Maven面板的刷新按钮同步配置,IDEA内部维护的模块依赖列表还是旧版本,启动时直接读取缓存的类路径,自然会加载残留的Tomcat依赖。
- 排除规则位置错误:如果你的Tomcat排除配置写在了Dev/Prod某个Profile内部,而不是全局公共配置区域,命令行执行
mvn dependency:tree时未激活对应Profile,看到的结果和IDEA实际加载的依赖可能存在偏差。 - 存在其他引入Tomcat的依赖路径:比如你只在顶层依赖里排除了spring-boot-starter自带的Tomcat,但其他子模块、第三方starter又间接引入了内嵌Tomcat,且这个引入路径不在你执行
mvn dependency:tree的扫描范围内,也会出现命令行看不到、启动时实际加载的情况。 - 排查时先点Maven面板的刷新按钮全量同步POM配置,再打开
File -> Project Structure -> Modules,找到你启动的模块对应的Dependencies列表,搜索tomcat关键字,删掉残留的内嵌Tomcat依赖项后再启动即可。
内容的提问来源于stack exchange,提问作者microwth
相关产品推荐
相关产品推荐

