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

标签 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,但是版本不兼容...
问题是因为使用了错误的xerces版本,所以pluginA的执行失败。

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

最佳答案

您可能可以使用ClassLoadersPlugin from here之类的东西为基于不同配置的任务创建不同的类加载器,然后针对这些配置指定依赖项。虽然不确定这是否适用于插件方案,但可能会这样,因为插件大概只是在创建任务,最终运行它们会使用不同的类加载器。

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

编辑:
另一个途径可能是考虑排除Excluding transitive dependencies中详细介绍的依赖关系,并创建专门包含两个xerces库的配置,并使您的任务基于这些配置运行,这看起来更像是“OOTB”。

关于java - 避免Gradle插件之间的依赖关系/类路径冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26917177/

相关文章:

java - 通过调用和对象调用与类调用有什么区别

java - 将SceneForm/ARCore添加到Gradle时,Android App无法编译

gradle - 在 gradle 脚本中跟踪每个任务的执行时间?

java - 如何将eclipse项目类路径添加到ant脚本中?

java - JSP访问中的HashMap<HashMap<Integer, Integer>, String>

Java 使用 gsm 调制解调器发送短信时出错

java - 从给定的 3D 数组中查找 null 的数组索引

gradle - 中止gradle时无法锁定文件哈希缓存

Java:将包含的 Jar 文件添加到在 linux 中创建的 Jar 文件

java - 找到 Java 标准库