Maven子POM如何排除父POM中test scope的依赖?
SLF4J绑定冲突的两种解决方案
方案1:子POM中排除父POM的slf4j-simple依赖
在子项目Foo的pom.xml里,通过依赖排除规则移除父POM中test scope的slf4j-simple,确保测试阶段只有logback-classic作为SLF4J实现:
<dependencies> <!-- 引入logback-classic作为SLF4J实现 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>你的实际版本号</version> </dependency> <!-- 从slf4j-api的依赖中排除父POM引入的slf4j-simple --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>你的实际版本号</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
也可以直接针对父POM中单独声明的slf4j-simple进行排除:
<dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
方案2:限制logback-classic不作用于test scope
调整子项目Foo中logback-classic的依赖范围,让它仅在主代码的编译、运行阶段生效,测试阶段继续使用父POM的slf4j-simple:
<dependencies> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>你的实际版本号</version> <!-- 仅在runtime阶段生效,test阶段不会引入该依赖 --> <scope>runtime</scope> </dependency> </dependencies>
如果需要在主代码中直接调用logback的API,可将scope设为compile,同时排除其在test阶段的传递依赖:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>你的实际版本号</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </exclusion> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者Garret Wilson
相关产品推荐
相关产品推荐

