【问题标题】:Avoid dependency/classpath conflict between Gradle plugins避免 Gradle 插件之间的依赖/类路径冲突
【发布时间】:2015-01-11 02:06:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java gradle classpath xerces


    【解决方案1】:

    您也许可以使用ClassLoadersPlugin from here 之类的东西根据不同的配置为您的任务创建不同的类加载器,然后指定您对这些配置的依赖关系。虽然不确定这是否扩展到插件场景,但它可能,因为插件可能只是创建任务,它们的最终运行将使用不同的类加载器。

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

    编辑: 另一种途径可能是考虑排除 Excluding transitive dependencies 中详述的依赖关系,并创建专门包含两个 xerces 库的配置,并根据您的任务运行这些配置,这似乎更“OOTB”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多