Ant脚本中的环境变量无法正常工作

13

我正在为一个Spring框架项目设置一个机器无关的构建环境,但我的ant配置似乎不起作用。我搜索了很多,但每个人似乎都认为env. *引用可以直接使用。有人能找到我的错误吗?

错误信息:

bash-3.1$ ant build
Buildfile: c:\Users\mkumpan\Projects\Spring testing\build.xml

BUILD FAILED
c:\Users\mkumpan\Projects\Spring testing\build.xml:85: c:\Users\mkumpan\Projects\Spring testing\${env.CATALINA_HOME}\lib does not exist.

build.xml:85:

<taskdef name="install" classname="org.apache.catalina.ant.InstallTask">
    <classpath refid="catalina-ant-classpath"/>
</taskdef>

catalina-ant-classpath 参考:

<path id="catalina-ant-classpath">
    <fileset dir="${appserver.lib}">
        <include name="catalina-ant.jar"/>
    </fileset>
</path>

在 build.properties 中声明了 ${appserver.lib}:

appserver.home=${env.CATALINA_HOME}
appserver.lib=${appserver.home}/lib

deploy.path=${appserver.home}/webapps

环境变量的回显效果如下:

bash-3.1$ echo $CATALINA_HOME
C:\Program Files\Tomcat

两个大问题:

  • 为什么它不能解析出环境变量?
  • 为什么它要在环境变量前面添加绝对路径?
3个回答

22
将以下行添加到build.xml文件中:
<property environment="env"/>

为环境变量定义前缀。从属性参考页面中的 environment 属性:

检索环境变量时要使用的前缀。如果指定 environment="myenv",则可以通过属性名称 "myenv.PATH" 或 "myenv.TERM" 访问特定于操作系统的环境变量。请注意,如果您使用一个带有最后 "." 的属性名称,它不会被加倍;即 environment="myenv." 仍然可以通过 "myenv.PATH" 和 "myenv.TERM" 访问环境变量。这个功能目前只在部分平台上实现了。欢迎发送补丁以增加支持此功能的平台 ;). 请注意,属性是区分大小写的,即使您的操作系统上的环境变量不是这样。例如,Windows 2000 的系统路径变量设置为名为 "env.Path" 而不是 "env.PATH" 的 Ant 属性。


太简单了...虽然我读过的文档中并不是很明显。谢谢,非常准确!答案将在9分钟内被接受。 - Maxim Kumpan
有人能解释一下吗,为什么在ant文件中无法使用%PROGRAMDATA%并替换为正确的路径。我已经在此处包含了属性。在Cmd中,“echo %PROGRAMDATA%”可以正常工作,尽管它未在Windows->系统->环境变量中定义。 - Alex

1
我希望在使用env.符号之前,您能声明<property environment="env."/>
此外,下面是您的构建脚本中设置特定环境变量的语法。
**Windows and OS/2**

假设Ant已经安装在c:\ ant中。以下设置环境:
set ANT_HOME=c:\ant
set JAVA_HOME=c:\jdk-1.5.0.05
set PATH=%PATH%;%ANT_HOME%\bin

**Linux/Unix (bash)**

假设Ant已安装在/usr/local/ant中。以下设置环境:
export ANT_HOME=/usr/local/ant
export JAVA_HOME=/usr/local/jdk-1.5.0.05
export PATH=${PATH}:${ANT_HOME}/bin

**Linux/Unix (csh)**

setenv ANT_HOME /usr/local/ant
setenv JAVA_HOME /usr/local/jdk/jdk-1.5.0.05
set path=( $path $ANT_HOME/bin )

设置符号链接指向JVM / JDK版本可以使更新更加无缝。


0

如果还有人在努力让这个工作起来(就像我一样),并且您不能(或者宁愿不)对所有属性使用export,可以尝试按照此处建议使用set -a


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接