2012-04-19 11 views
5

Tengo un archivo que carga build.gradlePMD (descargándolo de Maven aguas arriba), y después se carga un archivo de Ant build.xml que requiere PMD:de rutas de clases para los plugins de hormigas cuando se utiliza ANTBuilder de Gradle

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

Sin embargo, la importación hormiga falla:

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) 

Cómo puede Gradle's ant integration se encargará de hacer esto disponible?

+0

¿La construcción Ant tienen el mismo problema, o funciona cuando se ejecuta directamente? –

+0

@PeterNiederwieser La compilación Ant funciona cuando se ejecuta directamente; sin embargo, esto es con una instalación local de hormiga que ha añadido PMD directamente a su classpath por defecto. –

+0

... francamente, ya he encontrado una solución razonable para el problema (que implicó la actualización de shared-build.xml para especificar una ruta de clase explícita cuando se trata de PMD) ... pero preferiría poder usar el Instancia descargada de Gradle aun así. –

Respuesta

6

No hay una manera directa de hacerlo, ya que Gradle no ofrece ningún soporte API para esto. Entonces necesitas hackearlo de alguna manera.

Por ejemplo, se puede hacer algo como esto, justo antes de llamar ant.importBuild

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

alternativa, se puede llamar al método AddURL() con los caminos que obtiene a través de la resolución de dependencias del Gradle (de nuevo, esta debe ejecutarse antes de la llamada a 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()) 
} 

Por supuesto, otra solución sería tener la ruta de clase definida dentro de su archivo build.xml por lo que no tendrá que hacer nada de Gradle.

Vea algunos Introducir http://gradle.1045684.n5.nabble.com/How-to-add-to-classpath-for-ant-importBuild-td3268631.html

Cuestiones relacionadas