Maven antrun:将maven属性传递给ant

时间:2013-08-08 14:30:10

标签: maven maven-antrun-plugin

我正在尝试将maven属性(通过配置文件定义)传递给antrun执行:

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

属性在配置文件中定义,以允许在不同的服务器中进行部署(我知道这不是最好的方法,但这是事情在这里完成的方式),如下所示:

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

我的问题是我无法让maven属性在ant插件中工作;我试图在ant中添加<echoproperties>任务,以查看我拥有哪些属性,并且没有maven属性的痕迹。 是否可以使用maven定义的属性,还是应该使用其他方法?欢迎提出任何建议。

编辑:我按照第一个答案修改了脚本,它仍然无法正常工作

3 个答案:

答案 0 :(得分:19)

您可以通过定义新的Ant属性来传递属性(使用propertytarget中的configuration标记。例如:

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

当我在这个pom上执行mvn compile时,输出为:

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

当命令为mvn -PcustomProfile compile时,输出为:

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

这可以使用maven 3.0.5。

答案 1 :(得分:3)

在较新版本的maven中,您可以使用:

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

示例:

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

答案 2 :(得分:3)

大多数属性会自动传递给ant,至少如果您正在运行内联的ant脚本。一些属性被重命名。我建议运行&#34; mvn -X&#34;并且antrun插件将所有变量映射的列表打印到ant中(像basedir这样的东西变成project.basedir等)