2013-08-08 2 views
15

Sto cercando di passare le proprietà Maven (definito attraverso i profili) per l'esecuzione di antrun:Maven antrun: passano proprietà Maven ad ANT

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <dependencies> 
     <!-- ... these are ok --> 
    </dependencies> 
    <executions> 
     <execution> 
      <configuration> 
       <target> 
        <property name="ant_destDir" value="${destDir}" /> 
        <property name="ant_serverDeploy" value="${serverDeploy}" /> 
        <property name="ant_deployDir" value="${deployDir}" /> 
        <property name="ant_userDeploy" value="${userDeploy}" /> 
        <property name="ant_passwordDeploy" value="${passwordDeploy}" /> 
        <!-- correct task definitions for sshexec and scp --> 
        <sshexec host="${serverDeploy}" username="${userDeploy}" 
          password="${passwordDeploy}" trust="yes" 
          command="some command" /> 
        <scp remoteTodir="${userDeploy}@${serverDeploy}:${destDir}" 
          password="${passwordDeploy}" trust="yes" sftp="true"> 
         <fileset dir="${deployDir}" includes="*.jar" /> 
        </scp> 
        <sshexec host="${serverDeploy}" username="${userDeploy}" 
          password="${passwordDeploy}" trust="yes" 
          command="some command" /> 
       </target> 
      </configuration> 
      <phase>install</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Le proprietà sono definiti nei profili per consentire la distribuzione in diversi server (lo so che non è il miglior approccio possibile, ma questo è il modo in cui le cose vengono fatte qui), in questo modo:

<profile> 
    <id>aprofile</id> 
    <properties> 
     <property name="serverDeploy" value="somevalue" /> 
     <property name="userDeploy" value="someuser" /> 
     <property name="passwordDeploy" value="somepassword" /> 
     <!-- and so on --> 
    </properties> 
</profile> 

il mio problema è che non riesco a ottenere le proprietà Maven per lavorare in plug-in formica; Ho provato ad aggiungere un task <echoproperties> per vedere quali proprietà ho e non c'è traccia di proprietà di maven. È possibile utilizzare proprietà definite da Maven o dovrei usare un altro approccio? Qualsiasi suggerimento è benvenuto.

Edit: ho modificato lo script come da prima risposta, ancora non funziona

risposta

17

È possibile passare le proprietà definendo nuove proprietà Ant (utilizzando il tag property nel vostro target all'interno del configuration). Così, per esempio:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
          http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test</groupId> 
    <artifactId>test-module</artifactId> 
    <name>test-module</name> 
    <version>SNAPSHOT</version> 

    <properties> 
     <my.custom.property>false</my.custom.property> 
    </properties> 

    <profiles> 
     <profile> 
      <id>customProfile</id> 
      <properties> 
       <my.custom.property>true</my.custom.property> 
      </properties> 
     </profile> 
    </profiles> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <version>1.7</version> 
       <executions> 
        <execution> 
         <id>compile</id> 
         <phase>compile</phase> 
         <configuration> 
          <target> 
           <property name="antProperty" value="${my.custom.property}"/> 
           <echo message="Custom Ant Property is: ${antProperty}"/> 
           <echoproperties /> 
          </target> 
         </configuration> 
         <goals> 
          <goal>run</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Quando eseguo mvn compile su questo pom l'uscita è:

main: 
[echo] Custom Ant Property is: false 
[echoproperties] #Ant properties 
[echoproperties] #Thu Aug 08 17:17:30 CEST 2013 
[echoproperties] ant.project.name=maven-antrun- 
[echoproperties] ant.version=Apache Ant(TM) version 1.8.2 compiled on December 20 2010 
[echoproperties] antProperty=false 

e quando il comando è mvn -PcustomProfile compile allora l'uscita è:

main: 
[echo] Custom Ant Property is: true 
[echoproperties] #Ant properties 
[echoproperties] #Thu Aug 08 17:18:30 CEST 2013 
[echoproperties] ant.project.name=maven-antrun- 
[echoproperties] ant.version=Apache Ant(TM) version 1.8.2 compiled on December 20 2010 
[echoproperties] antProperty=true 

questo funziona utilizzando Maven 3.0.5.

+0

@RiccardoCossu Ho creato un progetto di test che conteneva solo un singolo pom (Ho modificato la mia risposta per includere il pom completo). Come descritto nella risposta quando eseguo Maven, la proprietà viene correttamente sostituita nella chiamata Antrun. Quale versione di Maven stai usando? – DB5

+0

Ho provato il tuo progetto di test e funziona; Devo ancora capire perché non funziona nel mio caso specifico ... Triste Sto usando 3.0.4 –

+2

capito! Sono caduto in un ciclo di confusione tra formica e Maven ... Stavo dichiarando la proprietà il modo "ant" in parte Maven (con un tag chiamato proprietà, invece del nome personalizzato) –

3

Sulle versioni più recenti di Maven si può semplicemente utilizzare:

<taskdef resource="net/sf/antcontrib/antcontrib.properties" 
        classpathref="maven.plugin.classpath" /> 

esempio:

<build> 
....  
     <plugins> 
     .... 
    <plugin> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <executions> 
      <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
      <tasks> 
       <taskdef resource="net/sf/antcontrib/antcontrib.properties" 
             classpathref="maven.plugin.classpath" /> 

       <echo message="Project name from Maven: ${project.name}" /> 

      </tasks> 
     </configuration> 
     </execution> 
     </executions> 
    </plugin> 
     .... 
     </plugins> 
     .... 
    </build> 

<dependencies> 
<dependency> 
    <groupId>ant-contrib</groupId> 
    <artifactId>ant-contrib</artifactId> 
    <version>1.0b3</version> 
    <exclusions> 
     <exclusion> 
      <groupId>ant</groupId> 
      <artifactId>ant</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>ant</groupId> 
    <artifactId>ant-nodeps</artifactId> 
    <version>1.6.5</version> 
</dependency> 
</dependencies> 
3

maggior parte delle proprietà sono passati automaticamente insieme alla formica, a almeno se stai eseguendo uno script di formica in linea. Alcune proprietà vengono rinominate. Suggerisco di eseguire "mvn -X" e il plug-in di antrun stampa un elenco di tutti i mapping di variabili in ant (cose come basedir diventa project.basedir, ecc.)