为传递依赖项禁用 Spring Boot AutoConfiguration

Posted

技术标签:

【中文标题】为传递依赖项禁用 Spring Boot AutoConfiguration【英文标题】:Disable Spring Boot AutoConfiguration for transitive dependencies 【发布时间】:2014-03-09 17:55:03 【问题描述】:

我创建了一个 Spring Boot 项目来模拟肥皂服务 - 它依赖于 org.springframework.ws:spring-ws-security 来处理 ws-sec 标头,这引入了对 org.springframework.security:spring-security-core 的传递依赖

在我的运行时类路径中添加它会导致 Spring Boot 认为我想要启用 Web 安全性,即使我使用 security.basic.enabled = false 禁用它,我最终也会收到运行时 ClassNotFound 异常,除非我还添加:

compile("org.springframework.security:spring-security-web:$springSecurityVersion")
compile("org.springframework.security:spring-security-config:$springSecurityVersion")

到我的运行时类路径。有什么方法可以向 Boot 表明,尽管它在运行时位于类路径上,但我真的不想与 Spring Security 有任何关系,并使其不需要这些额外的依赖项?

【问题讨论】:

【参考方案1】:

如果您真的不想与它有任何关系,也许它实际上是一个可选依赖项(并且可以被排除)?如果您无法向 @EnableAutoConfiguration 添加排除项(例如,请参阅 javadoc 了解详细信息)。你会想要排除SecurityAutoConfiguration

【讨论】:

感谢@DaveSyer 的快速回复!但这似乎不起作用,我仍然得到:Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/security/web/authentication/switchuser/AuthenticationSwitchUserEvent 在启动时。我的 BaseApplicationConfig.groovy 看起来像:@Configuration @EnableAutoConfiguration(exclude=[SecurityAutoConfiguration]) @Slf4j @ComponentScan(basePackages=["com.test.mocky"]) @CompileStatic public class BaseApplicationConfig ... 那是什么版本的 Spring Boot? 请尝试快照 使用最新快照 20140212 时出现与上述相同的错误 好的,你能在github(或类似的)上分享一个项目吗?

以上是关于为传递依赖项禁用 Spring Boot AutoConfiguration的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot pom.xml 中临时禁用依赖项 [关闭]

删除 gradle 中的传递类路径依赖项

在 Spring Boot 应用程序的生产环境中禁用 GraphiQL Playground

Gradle,如何禁用所有传递依赖

Spring boot - 在启动时禁用 Liquibase

Spring Boot-starter