强制Ant替换替换变量

时间:2016-09-19 16:29:55

标签: ant ant-contrib

我使用基于ant脚本的软件(Drops)。

我尝试动态生成要复制的文件的目标路径。为此,我执行了一个linux命令行。

在我的申请中,我有这个属性:

  • environment.props.environment_name =抗皱
  • application.props.target.gmao = /选择/ $ {environment.props.environment_name} / GMAO-WS

我希望Ant在运行时用它的值替换$ {environment.props.environment_name}。但事实并非如此。

这是我写的Ant脚本:

<project xmlns:drops="antlib:com.arcadsoftware.mmk.anttasks" name="deployJar" basedir="." default="main">
    <taskdef resource="net/sf/antcontrib/antlib.xml"/>
    <taskdef resource="com/dropssoftware/drops/ant/antlib.xml"/>
    <loadDropsContext/>

    <target name="main">
        <!-- get the value of the property "application.props.target.gmao" -->
        <propertycopy name="target.dir" from="application.props.target.gmao"/>
        <!-- I expect this to print target.dir=/opt/recette/gmao-ws but it print target.dir=/opt/${environment.props.environment_name}/gmao-ws -->
        <echoproperties />
        <!-- Supposed to copy from /opt/drops/storage/afile.jar to /opt/recette/gmao-ws but the property "target.dir" is wrong -->
        <exec executable="sudo">
            <arg value="/bin/cp"/>
            <arg value="${param.artifacts.root}/${param.jar.root}"/>
            <arg value="${target.dir}"/>
        </exec>
    </target>
</project>

使用此输入:

  • param.env = GMAO
  • param.artifacts.root = /选择/滴/存储/

应该将文件从artifacts目录复制到/ opt / recette / gmao-ws目录。但Ant试图将其复制到/ opt / $ {environment.props.environment_name} / gmao-ws。

我不明白为什么Ant不会用它的值替换$ {environment.props.environment_name}。

是否可以强制Ant用其值替换替换变量?

2 个答案:

答案 0 :(得分:0)

不完全清楚你要做什么。 propertycopy任务不是普通Ant的一部分,来自名为ant-contrib

的第三方扩展

我怀疑你正在尝试做的事情可以通过正常的属性替换来完成。我提供了一个例子。

实施例

如何通过设置属性将参数传递给构建文件的简单示例:

$ ant -Dparam.from=AAA -Dparam.to=BBB

build:
     [echo] 
     [echo]     sudo
     [echo]     /bin/cp
     [echo]     /opt/drops/storage/AAA
     [echo]     /opt/drops/storage/BBB
     [echo]     

的build.xml

请注意顶部声明的3个属性?这些实际上是可用于覆盖的默认值。

<project name="demo" default="build">

  <property name="param.artifacts.root" value="/opt/drops/storage"/>
  <property name="param.from"           value="fromDir"/>
  <property name="param.to"             value="toDir"/>

  <target name="build">
    <echo>
    sudo
    /bin/cp
    ${param.artifacts.root}/${param.from}
    ${param.artifacts.root}/${param.to}
    </echo>
  </target>

</project>

答案 1 :(得分:0)

我认为我在蚂蚁文档中找到了我的问题的答案: https://ant.apache.org/manual/properties.html

  

通常,属性值无法更改,一旦设置了属性,大多数任务都不允许修改其值。

对于我使用的软件:Drops,它在环境属性之前加载了应用程序属性。

因此,application.props.target.gmao设置为环境环境.props.environment_name,并且$ {environment.props.environment_name}无法替换。

我的问题的答案似乎是否定的,强制Ant不能用它的值替换替换变量。 如果变量以良好的顺序加载,它会自动完成。