Переменные среды в ant script не работают

Я пытаюсь настроить автономную среду сборки для проекта рамки 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>

${appserver.lib} объявлен в build.properties:

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

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

Повторяя работу envvar:

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

Два больших вопроса:

  • Почему, черт возьми, он не разбирает envvar?
  • Почему, черт возьми, он добавляет абсолютный путь к envvar?

Ответ 1

Добавьте в файл build.xml следующую строку:

<property environment="env"/>

чтобы определить префикс при ссылке на переменные окружения. На странице справки Property атрибут среды:

префикс для использования при извлечении переменных окружения. Таким образом, если вы укажете среду = "myenv", вы сможете получить доступ к переменным среды, зависящим от ОС, через имена свойств "myenv.PATH" или "myenv.TERM". Обратите внимание, что если вы укажете имя свойства с окончательным "." он не будет удвоен; т.е. среда = "myenv". по-прежнему позволят доступ к переменным окружения через "myenv.PATH" и "myenv.TERM". Эта функциональность в настоящее время реализована только на некоторых платформах. Не стесняйтесь отправлять исправления, чтобы увеличить количество платформ, на которых поддерживается эта функциональность;). Также обратите внимание, что свойства чувствительны к регистру, даже если переменные среды в вашей операционной системе отсутствуют; например Системная переменная системы Windows 2000 установлена ​​в свойство Ant с именем "env.Path", а не "env.PATH".

Ответ 2

Я надеюсь, что вы объявляете <property environment="env."/> перед использованием нотации env..

Кроме того, ниже приведен синтаксис в вашей сборке script для установки определенных переменных среды.

**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, делает обновления более плавными.

Ответ 3

Если кто-то еще пытается выполнить эту работу (как и я), и вы не можете (или не хотите) использовать export для всех своих свойств, попробуйте set -a как предложено здесь