我在一个项目中使用了两个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/