17

我正在尝试将 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 插件中工作;我试图<echoproperties>在 ant 中添加一个任务,以查看我有哪些属性,并且没有任何 maven 属性的痕迹。是否可以使用 Maven 定义的属性或者我应该使用其他方法?欢迎任何建议。

编辑:我根据第一个答案修改了脚本,它仍然不起作用

4

3 回答 3

21

您可以通过定义新的 Ant 属性来传递属性(使用 中的标签property)。例如:targetconfiguration

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

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

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。

于 2013-08-08T14:50:00.267 回答
4

大多数属性都会自动传递给 ant,至少在您运行内联 ant 脚本时是这样。一些属性被重命名。我建议运行“mvn -X”,antrun 插件将所有变量映射的列表打印到 ant 中(例如 basedir 变成 project.basedir 等)

于 2014-05-30T18:41:24.180 回答
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>
于 2013-12-11T16:48:03.347 回答