强制Ant替换变量



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

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

在我的应用程序中,我有以下属性:

  • environment.props.environment_name = recette
  • application.props.target.gmao =/opt/$ {environment.props.environment_name}/gmao-ws

我期望Ant替换${environment.props。通过运行时的值获取。但它没有。

下面是我写的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 =/opt/滴/存储/

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

我不明白为什么Ant不替换${environment.props。

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

不完全清楚你想做什么。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>

我想我在一个文档中找到了我问题的答案:https://ant.apache.org/manual/properties.html

通常情况下,属性值是不能改变的,一旦属性被设置,大多数任务将不允许修改它的值。

在我使用的软件:Drops的情况下,它在加载环境属性之前加载应用程序属性。

所以application.props.target.gmao设置在environment.props之前。Environment_name和${environment.props。

环境名称

对我的问题的答案似乎是NO,它是不可能强迫Ant用它的值替换替换变量。如果变量按正确的顺序加载,则会自动完成。

相关内容

  • 没有找到相关文章

最新更新