Как установить свойства Ant на основе переменных в Eclipse?

У меня есть общая проблема, и, вероятно, есть бесчисленное множество способов ее решения. Я ищу элегантное и простое решение для этого типичного сценария:

У меня есть проект в Eclipse с файлом сборки Ant (build.xml), файл сборки использует файл свойств (build.properties). В этом файле свойств я хочу установить свойство, указывающее на корневой каталог проекта eclipse, например:

project.root = /path/to/eclipse/workspace/projectName

или предпочтительно:

project.root = ${path.to.eclipse.workspace}/projectName

Как мне сделать это таким образом, чтобы:

  1. Работает на разных машинах с разными путями к корню проекта (т.е. в командной среде)
  2. Позволяет выполнять файл ant build.xml внутри eclipse.
  3. Позволяет выполнять файл ant build.xml вне eclipse (т. е. из командной строки)
  4. Позволяет файлу build.properties существовать в каталоге, отличном от корня проекта.

person gMale    schedule 11.01.2011    source источник
comment
Я бы даже согласился на частичное решение, которое элегантно решает проблемы № 1 и № 2. Номер 3 и 4 гораздо жестче.   -  person gMale    schedule 11.01.2011


Ответы (5)


См. Window -> Preferences -> Ant -> Runtime -> Properties, чтобы определить пользовательские свойства ant, которые должны быть доступны для любого скрипта ant, вызываемого из Eclipse. Просто установите то же свойство вручную при вызове скрипта из командной строки.

Ваш файл build.properties может существовать где угодно. Используйте обычные средства Ant, чтобы импортировать его в свой скрипт.

person Konstantin Komissarchik    schedule 11.01.2011
comment
Спасибо, что нашли время ответить. К сожалению, ваш ответ не решает напрямую ни одну из вышеперечисленных проблем, потому что 1) свойства среды выполнения ant не содержат записи для корневого пути проекта. Я предполагаю, что могу добавить ${workspace_loc} или что-то подобное в список свойств, но это не сработает вне eclipse. 2) установка свойства вручную при вызове скрипта из командной строки плохо масштабируется в командной среде. 3) Наконец, когда файл свойств импортируется, относительные пути могут измениться, поэтому требуются абсолютные пути, что является проблемой. - person gMale; 11.01.2011

Я думаю, что я ищу, чтобы добавить следующее в файл build.properties:

project.root = ${basedir}

в качестве альтернативы я могу просто использовать свойство basedir всякий раз, когда требуется project.root.

Я случайно просматривал файл исходный код для ivy.properties, и я увидел, что используется свойство basedir. Я только что проверил и убедился, что это свойство работает на разных машинах как внутри eclipse, так и из командной строки, а также при вызове ant из другого каталога, например:

ant -f /path/to/eclipse/workspace/projectName/build.xml

Когда у меня будет минутка, я проверю, что это также работает при импорте файла свойств в разных местах (например, внутри src/main/resources/config/ivy/ivysettings.xml).

person gMale    schedule 11.01.2011

Для моего проекта в архиве.

ProjectName <dir>
 |_ ant <dir>
     |_ ant.xml

В вашем случае можно просто изменить XML-файл ant, <project default="main" basedir="../"/>

Затем я могу получить корень проекта, используя переменную

e.g. <echo message= "Project Root: ${basedir}" />

person Man Pak Hong    schedule 14.02.2011

если вам нужно больше, чем тривиальные базовые вещи =
Ant4Eclipse - куча задач ant для доступа к eclipse конфигурации из ant -
могут вам помочь. Просто используйте его как есть или загрузите код и выберите соответствующие части.

person Rebse    schedule 11.06.2011
comment
Спасибо, я посмотрю на это. Звучит полезно. - person gMale; 13.06.2011

Вы можете установить относительные свойства eclipse для своей сборки ANT из eclipse

Перейдите к своим свойствам ANT Builder и в разделе аргументов вы можете установить свойства, используя -D, как показано ниже.

-Dworkspace="${workspace_loc}" -Dproject_dir="${project_loc}"

(здесь workspace_loc и project_loc — переменные eclipse). Доступ к этим свойствам можно получить в сценарии сборки ANT, как и к обычным свойствам, например:

<echo message="${workspace}" />
<echo message="${project_dir}" />

эталонный скриншот

person deepak    schedule 21.03.2017