2013-08-08 13 views
15

ich Maven Eigenschaften passieren versuchen (definiert durch Profile) auf eine antrun Ausführung:Maven antrun: pass Maven Eigenschaften Ameise

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

Die Eigenschaften werden in Profilen definiert für den Einsatz in verschiedenen Servern zu ermöglichen, (ich weiß, es ist nicht die beste Ansatz, aber das ist die Art und Weise die Dinge hier geschehen), wie folgt aus:

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

Mein Problem ist, dass ich nicht maven Eigenschaften bekommen kann in ant-Plugin zu arbeiten; Ich habe versucht, eine <echoproperties> Aufgabe in Ameisen hinzuzufügen, um zu sehen, welche Eigenschaften ich habe, und es gibt keine Spur von maven Eigenschaften. Ist es möglich, definierte Eigenschaften zu verwenden oder sollte ich einen anderen Ansatz verwenden? Jeder Vorschlag ist willkommen.

Edit: Ich änderte das Skript als pro erster Antwort, ist es noch nicht

Antwort

17

Sie können die Eigenschaften passieren durch die Definition von neuen Ant-Eigenschaften funktioniert (mit dem property Tag in Ihrem target im configuration). So zum Beispiel:

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

Als ich mvn compile auf dieser pom auszuführen ist die Ausgabe:

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 

und wenn der Befehl mvn -PcustomProfile compile ist dann der Ausgang ist:

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 

Dies funktioniert mit Maven 3.0.5.

+0

@RiccardoCossu Ich habe ein Testprojekt erstellt, das nur ein einzelnes Pom enthielt (Ich habe meine Antwort bearbeitet, um den kompletten Pom einzuschließen). Wie in der Antwort beschrieben, wenn ich maven ausführe, wird die Eigenschaft im antrun-Aufruf korrekt ersetzt. Welche Version von Maven benutzt du? – DB5

+0

Ich habe Ihr Testprojekt ausprobiert und es funktioniert; Ich muss immer noch verstehen, warum es in meinem speziellen Fall nicht funktioniert ... :-(Ich benutze 3.0.4 –

+2

hab es geschafft! Ich fiel in eine Schleife der Verwirrung zwischen Ameisen und Maven ... Ich erklärte die Eigenschaft der "ant" -Weg im Maven-Teil (mit einem Tag namens property, anstelle des benutzerdefinierten Namens) –

3

Auf den neueren Versionen von Maven können Sie nur verwenden:

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

Beispiel:

<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

Die meisten Eigenschaften entlang zu ant automatisch weitergeleitet werden, bei wenn Sie ein Inline-Skript ausführen. Einige der Eigenschaften werden umbenannt. Ich schlage vor, "mvn -X" auszuführen und das antrun-Plugin druckt eine Liste aller Variablenzuordnungen in ant (Dinge wie basedir wird project.basedir, etc.)