Сохранять статические поля между вызовами Java-задачи муравья - PullRequest
2 голосов
/ 05 августа 2011

Вот ситуация: я пытаюсь создать скрипт тестирования муравья, который делает следующее 1 - запускает утилиту для создания тестовых данных 2 - Run Junit Suite 3 - запускает утилиту для очистки тестовых данных.

Проблема состоит в том, что части 2 и 3 должны иметь доступ к некоторым статическим полям утилиты в 1 (например, генерировать уникальные имена тестовых данных). Эта проблема у меня заключается в том, что статические поля класса являются нулевыми, когда я пытаюсь получить к ним доступ, как будто задача Java в # 1 была запущена в отдельном процессе или с использованием другого загрузчика классов (я пытался установить атрибут fork = "false" для задачи java и использования -Dant.reuse.loader = true в строке cmd). Любой муравей-гуру знает, что здесь происходит?

1 Ответ

0 голосов
/ 05 августа 2011

Поскольку вы имеете дело с разными загрузчиками классов, вы никогда не добьетесь того, чтобы загрузчик классов нашел «неправильный» экземпляр того же класса и, следовательно, использовал «неправильное» статическое значение. Вы должны сделать связь между вызовами муравья через файл. Временный файл, скорее всего, не подойдет, так как он, вероятно, будет удален до того, как второй набор классов ant получит возможность работать с ним.

Существует две проблемы: генерация подходящих значений свойств и передача их между вызовами муравья. Возможно, вам все это не нужно, поскольку в вашей ситуации уже могут быть сгенерированы подходящие идентификаторы, но это здесь, если вы это сделаете.

Чтобы сгенерировать подходящие значения, один процесс ant должен выполнить задачу propertyfile, чтобы сгенерировать подходящие имена с изменяющимся идентификатором для каждого прогона в качестве части имени

<propertyfile file="testConfig.properties.ids" comment="Machine generated file, do not edit!">
  <entry key="test.suite.1.id" type="int" operation="+" unit="1"/>
  <entry key="test.suite.2.id" type="int" operation="+" unit="1"/>
</propertyfile>
<properties file="testConfig.properties.ids"/>
<propertyfile file="testConfig.properties" comment="Machine generated file, do not edit!">
  <entry key="test.suite.1.name" type="string" operation="=" value="TestSuite${test.suite.1.id}.sh"/>
  <entry key="test.suite.2.name" type="string" operation="=" value="TestSuite${test.suite.2.id}.sh"/>
</propertyfile>

Последующие процессы ant могут быть просто источником в исходном файле свойств процесса ant.

<property file="testConfig.properties"/>

Который будет иметь эффект определения

test.suite.1.name=TestSuite34.sh
test.suite.2.name=TestSuite83.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...