2012-04-19 51 views
5

我有一個build.gradle文件它將加載PMD(從上游的Maven下載的話),然後加載需要PMD的Ant build.xml文件螞蟻插件:類路徑用於使用ANTBuilder當從搖籃

buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    classpath 'pmd:pmd:4.2.5' 
    } 
} 
ant.importBuild 'shared-build.xml' 

然而,螞蟻導入失敗:

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's ant integration被指示,使這個可用?

+0

是否Ant構建有同樣的問題,還是在直接執行工作的呢? – 2012-04-21 16:18:32

+0

@PeterNiederwieser當直接執行ant build時會生效 - 但是,這是使用本地安裝的ant,它已將PMD直接添加到其默認類路徑中。 – 2012-04-21 19:09:08

+0

...坦率地說,我已經找到了一個合理的解決方法(包括更新shared-build.xml以在處理PMD時指定明確的類路徑)......但我更願意能夠使用即使如此,也可以通過Gradle下載。 – 2012-04-21 19:10:13

回答

6

有沒有直接的方式來做到這一點,因爲Gradle不提供任何API支持。所以你需要以某種方式破解它。

例如,你可以做這樣的事情,正確的調用ant.importBuild

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

或者您可以撥打伴你走過搖籃的依賴分辨率弄(再次路徑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文件中定義的類路徑,所以你就不必從搖籃做任何事情。

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