我的一个Android项目需要oauth.signpost
工件,所以我的pom.xml
中有类似的内容:
...
<dependency>
<groupId>oauth.signpost</groupId>
<artifactId>signpost-core</artifactId>
<version>1.2.1.1</version>
<scope>compile</scope>
</dependency>
...
问题是这取决于更多的工件,例如:org.apache.httpcomponents:httpclient:4.0.1
。问题是Android已经提供了该软件包,因此它使我的构建过程崩溃。
所以,我通常做的是转到IntelliJ上的依赖项配置,并手动将这些冗余工件标记为提供而不是 compile :
这个过程很烦人,不仅因为我有很多Maven依赖项,而且因为有时IntelliJ 忘记哪些依赖项是提供的市场,它会标记'全部为编译。
我看到的唯一解决方案是在pom.xml
中指定哪些依赖项提供,哪些编译。但是它们有很多,所以需要一些时间(同样,我必须手动检查每个工件需要哪个版本等)。
那么,它是否可以告诉Maven将子依赖项标记为提供,同时将主要依赖项保持为 compile ?
答案 0 :(得分:2)
可以选择添加依赖项排除。
请考虑以下事项:
这将是foo模块中的pom.xml:
<project>
<groupId>kung.fu</groupId>
<artifactId>foo</artifactId>
...
<dependencies>
<dependency>
<groupId>kung.fu</groupId>
<artifactId>bar</artifactId>
<version>1.0</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</project>