6

PMDをロードするbuild.gradleファイルがあり(上流の 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 に答える