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.

构建.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

两个大问题:

  • 为什么它不解析出envvar?
  • 为什么它会在envvar的绝对路径前面加上?
4

3 回答 3

21

将以下行添加到build.xml文件中:

<property environment="env"/>

在引用环境变量时定义前缀。从环境属性的属性参考页面:

检索环境变量时使用的前缀。因此,如果您指定 environment="myenv",您将能够通过属性名称“myenv.PATH”或“myenv.TERM”访问特定于操作系统的环境变量。请注意,如果您提供带有结尾“。”的属性名称。不会翻倍;即环境=“myenv”。仍将允许通过“myenv.PATH”和“myenv.TERM”访问环境变量。此功能目前仅在特定平台上实现。随意发送补丁以增加支持此功能的平台数量;)。还要注意,属性是区分大小写的,即使操作系统上的环境变量不是;例如 Windows 2000'

于 2013-09-10T08:30:27.737 回答
1

我希望你<property environment="env."/>在使用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 版本可以使更新更加无缝。

于 2013-09-10T08:37:51.480 回答
0

如果其他人仍在努力完成这项工作(就像我所做的那样),并且您不能(或不想)使用export您的所有属性,请按照此处set -a的建议尝试

于 2017-03-09T11:38:35.970 回答