避免Gradle插件之间的依赖/类路径冲突

时间:2014-11-13 19:49:43

标签: java gradle classpath xerces

我在项目中使用了两个gradle插件:

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'pluginA:1'
        classpath 'pluginB:1'
    }
}

apply plugin: 'pluginA'
apply plugin: 'pluginB'

pluginA和pluginB都依赖于xerces但是在不兼容的版本中...... 问题是pluginA的执行失败,因为使用了错误版本的xerces。

是否可以分离用于每个插件任务执行的类路径(每个插件在执行其中一个任务时只有自己的类路径)?

1 个答案:

答案 0 :(得分:0)

您可以使用ClassLoadersPlugin from here之类的内容根据不同的配置为您的任务创建不同的类加载器,然后根据这些配置指定依赖项。不确定这是否扩展到插件方案,但它可能,因为插件只是创建任务,可能最终运行它们将使用不同的类加载器。

或者apply method takes a map,您可以指定它所应用的对象,这样就不会在同一个项目对象上完成所有操作。

编辑: 另一种途径可能是在Excluding transitive dependencies中详细说明排除依赖关系,并创建专门包含两个xerces库的配置,并基于这些配置来执行这些配置,这看起来更多" OOTB&#34 ;