如何从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。旁白:想知道你是否可以从你的构建脚本中覆盖插件正在做的事情。谢谢!我去看看。