使用Gradle的ANTBuilder时ant插件的类路径

使用Gradle的ANTBuilder时ant插件的类路径,ant,gradle,Ant,Gradle,我有一个build.gradle文件可以加载(从上游Maven下载),然后加载一个Ant build.xml文件,该文件需要PMD: buildscript { repositories { mavenCentral() } dependencies { classpath 'pmd:pmd:4.2.5' } } ant.importBuild 'shared-build.xml' 但是,Ant导入失败: taskdef class net.sourceforg

我有一个
build.gradle
文件可以加载(从上游Maven下载),然后加载一个Ant build.xml文件,该文件需要PMD:

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath 'pmd:pmd:4.2.5'
  }
}
ant.importBuild 'shared-build.xml'
但是,Ant导入失败:

taskdef class net.sourceforge.pmd.ant.PMDTask cannot be found
using the classloader AntClassLoader[]
  at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:551)
[...]
  at org.gradle.api.internal.project.DefaultAntBuilder.importBuild(DefaultAntBuilder.groovy:76)

如何指导使其可用?

没有严格的方法来实现,因为Gradle不提供任何API支持。所以你需要用某种方法来破解它

例如,您可以在调用ant.importBuild之前执行类似操作

org.apache.tools.ant.Project.class.classLoader.addURL( file('libs/somelib.jar').toURI().toURL() )
或者,您可以使用通过Gradle依赖项解析获得的路径调用addURL()方法(同样,这应该在调用ant.importBuild之前执行)

当然,另一个解决方案是在build.xml文件中定义类路径,这样就不必从Gradle执行任何操作


查看此处的一些输入

Ant构建是否存在相同的问题,或者直接执行时是否有效?@PeterNiederwieser Ant构建在直接执行时有效——然而,这是在Ant的本地安装中,该安装已将PMD直接添加到其默认类路径……坦白地说,我已经为这个问题找到了一个合理的解决方法(包括在处理PMD时更新shared-build.xml以指定一个显式的类路径)。。。但即使如此,我还是希望能够使用Gradle下载的实例。
configurations { someconf }
dependencies { someconf "org.eclipse.jdt:ecj:3.6.1" }

def antClassLoader = org.apache.tools.ant.Project.class.classLoader
configurations.someconf.each { File f ->
    antClassLoader.addURL(f.toURI().toURL())
}