6

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

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 的 ant 集成以使其可用?

4

1 回答 1

6

没有直接的方法可以做到这一点,因为 Gradle 不为此提供任何 API 支持。所以你需要以某种方式破解它。

例如,你可以在调用 ant.importBuild 之前做这样的事情

org.apache.tools.ant.Project.class.classLoader.addURL( file('libs/somelib.jar').toURI().toURL() )

或者,您可以使用通过 Gradle 的依赖解析获得的路径调用 addURL() 方法(同样,这应该在调用 ant.importBuild 之前执行)。

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())
}

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

在此处查看一些输入http://gradle.1045684.n5.nabble.com/How-to-add-to-classpath-for-ant-importBuild-td3268631.html

于 2012-09-13T15:06:11.660 回答