【问题标题】:How to set the path environment variable from ant script如何从ant脚本设置路径环境变量
【发布时间】:2011-08-02 05:31:06
【问题描述】:

如何在ant脚本中设置路径环境变量

【问题讨论】:

    标签: ant environment-variables


    【解决方案1】:

    这是针对<exec> 任务的吗?

    运行<exec>任务时可以设置环境变量:

    <exec executable="${my.command}">
        <env key="foo" value="bar"/>
        <arg line="some value"/>
    </exec>
    

    您可以使用&lt;property environment="env"/&gt;扩展路径:

    <property environment="env"/>
    <exec executable="${my.command}">
       <env key="PATH" value="${env.PATH}:${my.directory}"/>
    </exec>
    

    如果这是一些需要环境变量的自定义任务,但如果未设置,则不允许您在任务中设置环境变量,您可以尝试将其设置为:

    <property environment="env"/>
    <property name="env.foo" value="bar!bar"/>
    

    这可能将名为foo 的环境变量设置为bar!bar! 的值。我记得关于这个的一些事情,但无法让它发挥作用。

    您可以做的另一件事是让一个 ant 脚本执行另一个并让第一个 ant 脚本设置环境值。当我必须设置 ANT_OPT 时,我这样做了。

    【讨论】:

    • 第一个解决方案对我有用。我正在运行 RHEL 5.4,并且必须在需要它的 ant exec 任务中设置我的 PYTHONPATH。
    • 在我的机器 (Win7) 上,它必须是 env.Path,而不是 env.PATH。
    • @NateGlenn 在 Unix 和 Java 中(在 Ant 中也是如此),环境变量名称区分大小写。 PATH 不同于 Path 和 path。在 Windows 中,环境变量名称不区分大小写。因此,Path、path 和PATH 都是相同的,但是当您使用 Ant 时,它们代表三个不同的变量。在 Unix 中,它总是PATH。在 Windows 中,我什至不确定它在机器之间是否相同。您可以使用&lt;echoproperties/&gt; 任务来查看您的系统对环境变量做了什么。
    • @DavidW。嘿,谢谢!我正在寻找可以做到这一点的命令。
    • 任务呢? the java task docs 不要说什么。这需要在跨平台上工作。我正在尝试设置一个名为 GAZEBO_MASTER_URI 的变量
    【解决方案2】:

    在ant中,属性是不可变的,所以上面大卫的建议:

    <property name="env.foo" value="bar!bar"/>
    

    不会工作。

    但是(使用 antcontrib-library)变量是可变的,所以这是可行的:

    <var name="env.foo" value="bar!bar"/>
    

    注意:要使用 antcontrib-library,请从此处下载:ANT Contrib - Download

    这可以完成工作,但似乎是一个卑鄙的把戏。

    所以对于您的具体问题,请尝试:

    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="${basedir}/lib/ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>
    
    <var name="env.PATH" value="some:custom:value"/>
    

    【讨论】:

    • 这是一个简洁的答案,但请注意可变任务不是标准 Ant 发行版的一部分;你必须安装 ant-contrib。
    • 另外,这实际上不会更新 windows 环境变量,只是更新 ant 属性 env.PATH
    【解决方案3】:

    您可以使用 setx 命令设置环境变量。

    setx 命令帮助请参考http://ss64.com/nt/setx.html

    <exec executable="setx.exe">
      <arg line="Path C:\jdk1.5.0_12\bin"/>
      <arg line="/m"/>
    </exec>
    

    【讨论】:

    • 来自 setx 文档:“2) 在本地系统上,由此工具创建或修改的变量将在未来的命令窗口中可用,但在当前的 CMD.exe 命令窗口中不可用。”所以这不能作为问题的解决方案,除非用户想要打开一个新的 shell。
    【解决方案4】:

    我发现它通过引用变量的值来工作

    <exec executable="setx">
        <arg line="Path &quot;${env.Path};c:\testPath&quot;" />
        <arg line="/m" />
    </exec>
    

    【讨论】:

      【解决方案5】:

      要通过 Ant 设置环境变量,请尝试调用 exec task 并设置命令行值。顺便说一下,我还没有尝试过,但它应该可以工作。

      【讨论】:

        【解决方案6】:

        因为我没有足够的声誉来评论 &lt;variable ... 的建议,所以我的评论作为答案... :-/

        在(“较新”)ant-contrib(额外的 ANT 包)中,该任务不称为&lt;variable ...,而是称为&lt;var ...!

        (但无论如何它对我不起作用,因为我认为 env.* (由&lt;property environment="env" ... /&gt; 任务创建)Java 属性/变量 的操作是仅与评估这些 Java 属性的任务/进程相关,这些属性不会自动“同步回”到操作系统环境变量)

        【讨论】:

          【解决方案7】:

          你可以使用扩展路径:

          然后你可以执行例如sh从ant到export的环境变量:

          <property environment="env"/>
          <exec executable="sh">
             <arg value="-c"/>
             <arg value="export PATH=${env.Path}:${myPath}"/>
          </exec>
          

          或者执行你的命令并将env设置为value,像这样:

          <property environment="env"/>
          <exec executable="${your.command}">
             <env key="PATH" value="${env.PATH}:${your.directory}"/>
          </exec>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-01-04
            • 2011-03-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-29
            • 2012-01-19
            相关资源
            最近更新 更多