2013-08-08 18 views
15

Próbuję przekazać właściwości Maven (zdefiniowany przez profile) do wykonania antrun:Maven antrun: pass właściwości Maven 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> 

właściwości są zdefiniowane w profilach w celu umożliwienia wdrożenia w różnych serwerach (wiem, że to nie jest najlepszy z możliwych rozwiązań, ale jest to sposób rzeczy są zrobione tutaj), podobnie jak to:

<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> 

Moim problemem jest to, że nie można uzyskać właściwości Maven do pracy w plugin mrówek; Próbowałem dodać zadanie na mrówce, aby zobaczyć, jakie właściwości mam i nie ma śladu właściwości maven. Czy możliwe jest użycie właściwości zdefiniowanych przez użytkownika lub czy powinienem zastosować inne podejście? Wszelkie sugestie są mile widziane.

Edycja: zmodyfikowany skrypt jak na pierwszej odpowiedzi, to nadal nie działa

Odpowiedz

17

można przekazać właściwości definiując nowe właściwości Ant (z wykorzystaniem znacznika property w swojej target w configuration). Tak więc na przykład:

<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> 

Kiedy wykonać mvn compile w tym pom wyjście jest:

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 

a gdy polecenie jest mvn -PcustomProfile compile to wyjście jest:

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 

Działa to za pomocą maven 3.0.5.

+0

@RiccardoCossu Stworzyłem projekt testowy, który zawierał tylko jeden pom (Edytowałem swoją odpowiedź, aby dołączyć cały pom). Jak opisano w odpowiedzi, gdy wykonuję maven, właściwość jest poprawnie zamieniana w wywołaniu Antrun. Jakiej wersji maven używasz? – DB5

+0

Wypróbowałem twój testowy projekt i działa; Nadal muszę zrozumieć, dlaczego to nie działa w moim konkretnym przypadku ... :-(Używam 3.0.4 –

+2

zrozumiałem! Wpadłem w pętlę pomieszania między mrówką a mavenem ... Deklarowałem właściwość "mrówka" w części maven (z tagiem o nazwie property, zamiast niestandardowej) –

3

W nowszych wersjach Maven można po prostu użyć:

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

przykład:

<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

Większość właściwości są automatycznie przekazane do mrówek, na najmniej jeśli masz uruchomiony skrypt ant inlined. Niektóre właściwości zostają zmienione. Sugeruję uruchomienie "mvn -X", a wtyczka antrun wypisze listę wszystkich zmiennych mapowań na mrówkę (rzeczy takie jak basedir staje się project.basedir, itp.)

Powiązane problemy