2012-07-19 13 views
7

En la hormiga Maven Ant Tasks se puede utilizar para leer las propiedades de Maven como esto:¿Lectura de información del archivo pom.xml existente usando Gradle?

<artifact:pom id="mypom" file="pom.xml" /> 
<echo>The version is ${mypom.version}</echo> 

¿Existe apoyo "nativo" en Gradle para acceder a los elementos del pom de un archivo pom.xml física existente o tengo que ir a través de el enfoque Ant anterior en mi archivo .gradle para hacer que esto funcione?

Esta página:

http://gradle.org/docs/current/userguide/maven_plugin.html

tiene información sobre la generación de archivos pom pero eso no es lo que estoy buscando. He tratado de crear un archivo .gradle que hace lo mismo:

repositories { 
     mavenCentral() 
    } 

    configurations { 
     mavenAntTasks 
    } 

    dependencies { 
     mavenAntTasks 'org.apache.maven:maven-ant-tasks:2.1.1' 
    } 

    task hello << { 
     ant.taskdef(resource: 'org/apache/maven/artifact/ant/antlib.xml', 
        uri: 'antlib:org.apache.maven.artifact.ant', 
        classpath: configurations.mavenAntTasks.asPath) 

    // what is the gradle syntax for this: 
    // <artifact:pom id="mypom" file="maven-project/pom.xml" /> 
    // its not a property or a task... 
    def artifact = groovy.xml.NamespaceBuilder.newInstance(ant,'antlib:org.apache.maven.artifact.ant') 
    artifact.pom(id:'mypom', file: 'pom.xml') 
    def text = properties['mypom.version'] 
    println "From pom file: " + text 

    } 

donde tengo un pom.xml sencilla situada junto al archivo build.gradle. Pero no puedo encontrar ninguna información en los documentos de gradle sobre las llamadas de hormiga correspondientes para esta tarea. He mirado:

http://www.gradle.org/docs/current/userguide/ant.html

de cómo leer las propiedades de hormigas y las referencias que esto:

<artifact:pom id="mypom" file="maven-project/pom.xml" /> 

parece ser ni una propiedad o de referencia. Me encontré con esta página:

http://snipplr.com/view/4082/

donde se utiliza un NamespaceBuilder:

def mvn = groovy.xml.NamespaceBuilder.newInstance(ant, 'antlib:org.apache.maven.artifact.ant') 

pero cuando se utiliza este enfoque me sale:

The AbstractTask.getDynamicObjectHelper() method has been deprecated and will be removed in the next version of Gradle. Please use the getAsDynamicObject() method instead. 
From pom file: null 

después de un poco de google Encontré:

http://issues.gradle.org/browse/GRADLE-2385

que parece estar relacionado, pero el valor de la propiedad sigue siendo nulo.

+0

¿Por qué esperas que esto esté documentado en los documentos de Gradle? Tendrás que buscar en la documentación de 'maven-ant-tasks'. –

+0

He leído los documentos para maven-ant-tasks que simplemente dice que la información de pom se puede leer definiendo que luego se puede usar como La versión es $ {mypom.version}. Pero, ¿cómo leo la etiqueta en gradle después de configurar la ruta de clases para incluir las tareas maven-ant-tasks? – u123

+0

'artifact: pom' es una tarea Ant. Consulte el capítulo [Uso de Ant de Gradle] (http://gradle.org/docs/current/userguide/userguide_single.html#ant) en la guía del usuario de Gradle para saber cómo trabajar con las tareas Ant. Después de ejecutar la tarea, puede tomar la referencia 'mypom'. No estoy seguro de cómo proceder desde allí. Usar 'XmlSlurper' sería mucho más simple. –

Respuesta

3

Gradle no proporciona soporte nativo para analizar archivos POM, pero el XmlSlurper de Groovy hace que el análisis XML sea fácil y conveniente. Probablemente preferiría eso sobre el enfoque Ant.

+0

Me gustaría probarlo con una hormiga de Gradle. ¿Cómo es posible desde Gradle mapear el archivo pom en la identificación después de configurar maven-ant-task.jar? – u123

3

El siguiente recorte de código debería funcionar.

defaultTasks 'hello' 

repositories { 
    mavenCentral() 
} 
configurations { 
    mavenAntTasks 
} 
dependencies { 
    mavenAntTasks 'org.apache.maven:maven-ant-tasks:2.1.3' 
} 

task hello << { 
    ant.taskdef(
    resource: 'org/apache/maven/artifact/ant/antlib.xml', 
    uri: 'antlib:org.apache.maven.artifact.ant', 
    classpath: configurations.mavenAntTasks.asPath) 

    ant.'antlib:org.apache.maven.artifact.ant:pom'(id:'mypom', file:'pom.xml') 
    println ant.references['mypom'].version 
} 

La lectura del archivo pom de groovy xmlslurper es más directa, creo.

0

Por favor, hágamelo saber la entrada del archivo build.gradle para el siguiente pom.contenido xml:

  <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-eclipse-plugin</artifactId> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <version>2.19.1</version> 
       <configuration> 
        <additionalClasspathElements> 
         <additionalClasspathElement>resources</additionalClasspathElement> 
        </additionalClasspathElements> 
        <forkCount>5</forkCount> 
        <reuseForks>true</reuseForks> 
        <includes> 
         <include>**/*IT.java</include> 
        </includes> 
        <runOrder>alphabetical</runOrder> 
        <argLine>-Duser.language=en</argLine> 
        <argLine>-Xmx512m</argLine> 
        <argLine>-XX:MaxPermSize=256m</argLine> 
        <argLine>-Dfile.encoding=UTF-8</argLine> 
        <systemPropertyVariables> 
         <!--<cucumber.options>&#45;&#45;tags @example</cucumber.options>--> 
        </systemPropertyVariables> 
       </configuration> 
       <executions> 
        <execution> 
         <id>failsafe-integration-test</id> 
         <phase>integration-test</phase> 
         <goals> 
          <goal>integration-test</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>com.github.temyers</groupId> 
       <artifactId>cucumber-jvm-parallel-plugin</artifactId> 
       <version>4.2.0</version> 
       <executions> 
        <execution> 
         <id>generateRunners</id> 
         <phase>validate</phase> 
         <goals> 
          <goal>generateRunners</goal> 
         </goals> 
         <configuration> 
          <!-- Mandatory --> 
          <glue>com.cucumber.stepdefinitions</glue> 
          <strict>true</strict> 
          <monochrome>true</monochrome> 
          <!-- These are the default values --> 
          <outputDirectory>${project.build.directory}/generated-test-sources/cucumber</outputDirectory> 
          <featuresDirectory>src/test/resources/features/</featuresDirectory> 
          <cucumberOutputDir>target/cucumber-reports</cucumberOutputDir> 
          <format>json</format> 
          <tags>${TestType}</tags> 
          <tags>[email protected]</tags> 
          <customVmTemplate> 
           src/main/resources/cucumber-custom-runner.vm 
          </customVmTemplate> 
          <!-- <filterFeaturesByTags>true</filterFeaturesByTags>--> 
          <namingScheme>pattern</namingScheme> 
          <namingPattern>{f}_{c}IT</namingPattern> 
          <plugins> 
           <plugin> 
            <name>com.cucumber.listener.ExtentCucumberFormatter</name> 
            <extension>html</extension> 
            <outputDirectory>output/</outputDirectory> 

           </plugin> 
          </plugins> 
          <parallelScheme>SCENARIO</parallelScheme> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
+0

Por favor comparta más detalles. ¡Gracias! – Saadi

Cuestiones relacionadas