2016-10-26 6 views
2

У меня есть следующие зависимости в моей build.gradle:Как я могу исключить зависимость от POM, созданного плагином Gradle Maven Publishing?

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, чтобы опубликовать мою библиотеку, она включает в себя как в ANTLR выполнения и компиляции время JARs в качестве зависимостей в generated POM:

<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 не будет иметь зависимость от времени компиляции. Однако сборка не выполняется.

+0

ясно вы добавляете зависимости от 'antlr' конфигурации в файл' compile' конфигурации где-то еще в вашем build.gradle. Вам нужно больше увидеть build.gradle. Также почему у вас есть конфиг 'antlr'? – RaGe

+0

Несомненно, вот build.grade: https://github.com/graphql-java/graphql-java/blob/v2.1.0/build.gradle. У меня есть конфигурация 'antlr', потому что я использую плагин [Gradle ANTLR] (https://docs.gradle.org/current/userguide/antlr_plugin.html) –

+0

@RaGe:' ./gradlew generatePomFileForGraphqlJavaPublication' генерирует pom в 'build/publications/graphqlJava/pom-default.xml' –

ответ

4

От @RaGe предложения для использования pom.withXml я смог использовать этот хакер, чтобы удалить эту дополнительную зависимость.

pom.withXml { 
    Node pomNode = asNode() 
    pomNode.dependencies.'*'.findAll() { 
    it.artifactId.text() == 'antlr4' 
    }.each() { 
    it.parent().remove(it) 
    } 
} 

До:

<dependencies> 
    <dependency> 
     <groupId>org.antlr</groupId> 
     <artifactId>antlr4-runtime</artifactId> 
     <version>4.5.1</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.antlr</groupId> 
     <artifactId>antlr4</artifactId> 
     <version>4.5.1</version> 
     <scope>runtime</scope> 
    </dependency> 
</dependencies> 

После:

<dependencies> 
    <dependency> 
     <groupId>org.antlr</groupId> 
     <artifactId>antlr4-runtime</artifactId> 
     <version>4.5.1</version> 
     <scope>runtime</scope> 
    </dependency> 
</dependencies> 

еще несколько ссылок, чтобы объяснить вопрос:

1

Дай град-ярость выстрела. Он определенно обрабатывает исключения, и я уверен, что в генерируемые помпы включены только известные конфигурации. Он также имел некоторый код, чтобы убедиться, что нет никаких повторяющихся записей с конфликтующими областями (который был королевской болью, чтобы выяснить, решение)

https://github.com/gradle-fury/gradle-fury

отказ от ответственности, я работаю над этим

+0

Спасибо! Вы проверите это. –