2012-07-19 12 views
7

In Ant il Maven Ant Tasks può essere utilizzato per leggere le proprietà Maven come questo:Informazioni di lettura dal file pom.xml esistente usando Gradle?

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

Esiste il supporto "nativo" in Gradle per accedere agli elementi pom da un file pom.xml fisico esistente o devo passare attraverso l'approccio Ant sopra nel mio file .gradle per farlo funzionare?

In questa pagina:

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

ha informazioni sulla generazione di file pom, ma quello non è quello che sto cercando. Ho cercato di creare un file .gradle che fa lo stesso:

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 

    } 

dove ho un semplice file pom.xml situato accanto al file build.gradle. Ma non riesco a trovare alcuna informazione nei documenti gradle sulle corrispondenti chiamate ant per questa attività. Ho guardato:

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

per il modo di leggere le proprietà formica e riferimenti, ma questo:

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

sembra essere né una proprietà o di riferimento. Mi sono imbattuto in questa pagina:

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

in cui una viene utilizzata NamespaceBuilder:

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

ma quando si utilizza questo approccio ottengo:

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 

dopo un po 'di googling Ho trovato:

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

che sembra correlato, ma il valore della proprietà è ancora nullo.

+0

perché si aspetta che questo sia documentata nella documentazione di Gradle ?! Dovrai cercare nella documentazione di 'maven-ant-tasks'. –

+0

Ho letto i documenti per le attività di maven-ant che dicono semplicemente che le informazioni su pom possono essere lette definendo che può essere usato come La versione è $ {mypom.version}. Ma come faccio a leggere il tag in gradle dopo aver impostato il classpath per includere le attività di maven-ant? – u123

+0

'artefatto: pom' è un'attività Ant. Vedi il capitolo [Using Ant from Gradle] (http://gradle.org/docs/current/userguide/userguide_single.html#ant) nella guida utente di Gradle su come lavorare con le attività di Ant. Dopo aver eseguito l'attività, puoi prendere il riferimento 'mypom'. Non esattamente sicuro come procedere da lì. Usare 'XmlSlurper' sarebbe molto più semplice. –

risposta

3

Gradle non fornisce supporto nativo per l'analisi dei file POM, ma Groovy's XmlSlurper rende l'analisi XML facile e conveniente. Probabilmente preferirei questo oltre l'approccio Ant.

+0

Mi piacerebbe provarlo con formica di Gradle. Com'è possibile da Gradle mappare il file pom nell'ID dopo aver configurato maven-ant-task.jar? – u123

3

Il seguente codice snip dovrebbe funzionare.

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 
} 

lettura di file pom da xmlslurper Groovy è il modo più schietto, credo.

0

Per favore fatemi sapere la voce del file build.gradle per il pom sottostante.contenuto 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

Si prega di condividere più dettagli. Grazie! – Saadi

Problemi correlati