如果我的myproject1中有一个项目具有以下依赖项:
<!-- logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.1</version>
<scope>test</scope>
</dependency>
我在myproject2中包含myproject1,如下所示:
<dependency>
<groupId>com.mydomain</groupId>
<artifactId>myproject1</artifactId>
<version>1.0</version>
</dependency>
<!-- Android Logging-->
<dependency>
<groupId>com.github.tony19</groupId>
<artifactId>logback-android-core</artifactId>
<version>1.1.1-2</version>
</dependency>
<dependency>
<groupId>com.github.tony19</groupId>
<artifactId>logback-android-classic</artifactId>
<version>1.1.1-2</version>
</dependency>
我仍然看到myproject2中包含了回溯类。我的理解是测试范围应该防止那些罐子流入父项目。我误会了什么吗?我目前遇到编译问题,因为我的父项目依赖于logback-android,因此我有多个具有相同名称的类,例如ch.qos.logback.classic.AsyncAppender
。
答案 0 :(得分:1)
您可以从myproject1
中排除传递依赖关系,此处有两个选项。
可选的依赖。将logback-core
中的myproject1
标记为可选:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.1</version>
<scope>test</scope>
<optional>true</optional>
</dependency>
排除的依赖。包括logback-core
:
myproject1
<dependency>
<groupId>com.mydomain</groupId>
<artifactId>myproject1</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</exclusion>
</exclusions>
</dependency>
此外,我认为如果您使用测试运行构建(-Dmaven.test.skip=true
)logback-core
将无法包括在内。
运行mvn dependency:tree
以查看您的依赖项的来源及其范围。