2012-04-19 38 views
5

Mam plik build.gradle który ładuje PMD (pobierając je z Maven upstream), a następnie ładuje plik Ant build.xml która wymaga PMD:Classpath dla mrówek wtyczek podczas korzystania ANTBuilder z Gradle

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

jednak Ant import nie powiedzie:

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) 

Jak Gradle's ant integration zostać poinstruowany, aby ta dostępna?

+0

Czy Ant kompilacji mają ten sam problem, czy to działa, gdy wykonywane bezpośrednio? –

+0

@PeterNiederwieser kompilacja ant działa po uruchomieniu bezpośrednio - jest to jednak z lokalną instalacją mrówki, która ma PMD bezpośrednio dodaną do domyślnej ścieżki klasy. –

+0

... szczerze mówiąc, znalazłem już rozsądne obejście tego problemu (co wymagało aktualizacji pliku shared-build.xml w celu określenia jawnej ścieżki klasy w przypadku PMD) ... ale wolałbym móc korzystać z Instancja z pobranym gradem. –

Odpowiedz

6

Nie ma prostego sposobu, aby to zrobić, ponieważ Gradle nie oferuje żadnego wsparcia API dla tego. Musisz go więc zhackować w jakiś sposób.

Na przykład, można zrobić coś takiego, tuż przed wywołaniem ant.importBuild

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

Alternatywnie można wywołać metodę addURL() z drogami można uzyskać dzięki rozdzielczości zależność Gradle jest (ponownie, tym powinien zostać wykonany przed wywołaniem 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()) 
} 

Oczywiście, innym rozwiązaniem byłoby mieć ścieżka klasy zdefiniowane wewnątrz pliku build.xml więc nie trzeba robić nic z Gradle.

Zobacz niektóre wejścia tutaj http://gradle.1045684.n5.nabble.com/How-to-add-to-classpath-for-ant-importBuild-td3268631.html

Powiązane problemy