如何从Gradle Maven发布插件构建的POM中排除依赖项?
我的如何从Gradle Maven发布插件构建的POM中排除依赖项?,gradle,antlr,build.gradle,antlr4,Gradle,Antlr,Build.gradle,Antlr4,我的build.gradle中有以下依赖项: 依赖项{ 编译“org.antlr:antlr4运行时:4.5.1” 编译“org.slf4j:slf4j api:1.7.12” antlr“org.antlr:antlr4:4.5.1” testCompile组:“junit”,名称:“junit”,版本:“4.11” testCompile'org.spockframework:spock核心:1.0-groovy-2.4' testCompile'org.codehaus.groovy:gr
build.gradle中有以下依赖项:
依赖项{
编译“org.antlr:antlr4运行时:4.5.1”
编译“org.slf4j:slf4j api:1.7.12”
antlr“org.antlr:antlr4:4.5.1”
testCompile组:“junit”,名称:“junit”,版本:“4.11”
testCompile'org.spockframework:spock核心:1.0-groovy-2.4'
testCompile'org.codehaus.groovy:groovy-all:2.4.4'
testCompile'cglib:cglib nodep:3.1'
testCompile'org.objeness:objeness:2.1'
}
当我使用Maven Publishing插件发布我的库时,它将ANTLR运行时和编译时JAR作为依赖项包含在:
org.antlr
antlr4运行时
4.5.1
运行时
org.antlr
antlr4
4.5.1
运行时
我只希望运行库包含在这个POM中
罪魁祸首是antlr
依赖关系:如果我删除这一行,生成的POM就没有编译时依赖关系。但是,构建失败。给格拉德尔·弗瑞一次机会。它肯定会处理排除,而且我非常确定生成的POM中只包含已知的配置。它还有一些代码来确保没有重复的条目和冲突的作用域(这是解决方案的一大难题)
免责声明,我通过@RaGe suggestion使用pom来处理它。通过XML
我可以使用这个黑客来删除额外的依赖关系
pom.withXml{
Node-pomNode=asNode()
pomNode.dependencies.'*'.findAll(){
it.artifactId.text()
}.each(){
it.parent().remove(它)
}
}
之前:
org.antlr
很明显,您正在将antlr
config中的依赖项添加到build.gradle中的compile
config中。需要更多了解build.gradle。还有,为什么您有一个antlr
config?当然,这是build.grade:。我有一个antlr
配置,因为我使用@RaGe:/gradlew generatePomFileForGraphqlJavaPublication
在build/publications/graphqlJava/pom default.xml
中生成pom。antlr插件就是我指责你所做的。编写一个任务,在生成的xml中拖拉并删除有问题的部分,这肯定是可行的。甚至可以在发布部分使用pom.withxml
。然后,antlr插件应该将antlr
config添加到compileOnly
而不是compile
,这将解决所有问题。主要依赖项不能到达pom。旁白:想知道你是否可以从你的构建脚本中覆盖插件正在做的事情。谢谢!我去看看。