我在build.gradle
中有以下依赖项:
dependencies {
compile 'org.antlr:antlr4-runtime:4.5.1'
compile 'org.slf4j:slf4j-api:1.7.12'
antlr "org.antlr:antlr4:4.5.1"
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
testCompile 'org.codehaus.groovy:groovy-all:2.4.4'
testCompile 'cglib:cglib-nodep:3.1'
testCompile 'org.objenesis:objenesis:2.1'
}
当我使用Maven Publishing插件发布我的库时,它在生成的POM中包含了ANTLR运行时和编译时JAR作为依赖项:
<dependencies>
<dependency> <!-- runtime artifact -->
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.5.1</version>
<scope>runtime</scope>
</dependency>
<dependency> <!-- compile time artifact, should not be included -->
<groupId>org.antlr</groupId>
<artifactId>antlr4</artifactId>
<version>4.5.1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
我只希望运行时库包含在这个POM中。
罪魁祸首是antlr
依赖:如果删除这一行,生成的POM就没有编译时依赖项。然而,构建失败了。
3条答案
按热度按时间pcww981p1#
从@RaGe建议使用
pom.withXml
,我能够使用这个黑客来删除额外的依赖。使用前:
之后:
更多链接来解释这个问题:
nbysray52#
给予grad福瑞一个机会。它肯定会处理排除,我很确定只有已知的配置包含在生成的pom中。它也有一些代码来确保没有重复的条目与冲突的范围(这是一个痛苦的皇家找出解决方案)
https://github.com/gradle-fury/gradle-fury
免责声明,我在努力
zyfwsgd63#
在某些情况下,您可能需要强制特定依赖项在gradle maven publish插件构建的pom中具有排除项。据我在写这篇文章时所知,没有一种直接的方法可以不使用pom.withXml来完成这一任务
我将把这段代码留在这里,以防对其他人有帮助。特别是,Spring依赖管理插件的用户可能会发现这很有用
这将导致
而在以前,如果没有修改,