2010-05-20 2 views
2

Нам нужно проверить сборку java с языками, установленными на разные значения. Я могу вручную (то есть через export LANG=en_DK.UTF-8 и export LANG=en_DK) проверить, что модульные тесты, выполняемые с помощью скрипта сборки ant, ведут себя по-разному, но мне нужно установить переменную среды из муравья. Я попытался установить его с помощью этих методов (с набором оболочки $LANG к en_DK.UTF-8):Ant игнорирует попытку переопределить переменную среды LANG

  1. с использованием -D в командной строке: ant -DLANG=en_DK
  2. используя build.properties файл с линией LANG=en_DK в нем
  3. с помощью после выступлений в файле build.xml (извините за форматирование, я не могу получить SO, чтобы отобразить его в противном случае):

:

<property environment="ANTENV"/> 
<property name="ANTENV.LANG" value="en_DK"/> 

Использование любого из трех возможностей, и при запуске с -debug, муравей сообщает, что:

Override ignored for property "LANG" 

Что я могу сделать, чтобы установить переменную окружения LANG внутри муравья?

ответ

1

ANT Properties are immutable,

<property name="ANTENV.LANG" value="en_DK"/> 

могут быть интерпретированы муравей как попытка переопределить значение LANG уже присутствует при сохранении всех переменных среды в ANTENV<property environment="ANTENV"/>).

Так что вам нужно сохранить, чтобы сохранить это значение в отдельном свойстве.

<property name="MY.LANG" value="${env.LANG}" /> 
+0

Но мне не нужно хранить значение; Мне нужно установить его так, чтобы JVM при выполнении тестов мог использовать либо значение en_DK, либо en_DK.UTF-8 как LANG. Я признаю, что свойства ant неизменяемы, я просто хотел бы вмешиваться в переменные окружения изнутри ant ... – Steen

+0

@Steen: «Я просто хотел бы вмешиваться в переменные окружения изнутри ant»: это то, что '< Свойство name = "MY.LANG" value = "$ {env.LANG}" /> 'позволяет: сделать это, если вы можете повторно использовать его в других задачах. То, что вы не можете сделать, это изменить что-то, установленное вне сеанса Ant (например, значение среды). – VonC

+0

ОК, это соответствует как ответ на мой вопрос. Не тот, который я действительно хотел услышать, но это моя проблема. Я экспериментировал с завершением вызова build-файла в shell-скрипт, который устанавливает среду LANG перед вызовом ant. Я отлично работаю, но чувствую себя как хак;) – Steen

0

Предполагая, что ваш «протестировать Java сборку» делается вызовом <java>, вы можете использовать вилочный флаг и передать свойства вновь созданный процессу. Вот пример из Ant documentation:

<java classname="test.Main" 
     fork="yes" > 
    <sysproperty key="DEBUG" value="true"/> 
    <arg value="-h"/> 
    <jvmarg value="-Xrunhprof:cpu=samples,file=log.txt,depth=3"/> 
    </java> 
+0

Спасибо за предложение. Как отмечено в ответе VonC, я достигаю своей цели с помощью оболочки оболочки. Ваше решение имеет тот же эффект, но также (как и оболочка оболочки оболочки оболочки) чувствует себя взломанным. Спасибо за ответ. – Steen

Смежные вопросы