Почему мой основной сборочный файл Ant не работает должным образом? - PullRequest
2 голосов
/ 14 апреля 2009

У нас есть несколько скриптов Ant, по одному для каждого нашего подпроекта. В конце мы хотим запустить все это из основного сценария сборки и выполнить некоторую другую уборку, чтобы упаковать весь проект. Каждый из отдельных скриптов Ant называется ant.xml и находится в подкаталоге своего проекта. Каждый использует Ant import для импорта ant-commons.xml, а затем переопределяет некоторые из конкретных целей там.

Например, один из проектов переопределяет цель compile, чтобы соответствующим образом установить classpath и установить source и target на 1,5 (для ant-commons используется 1.4)

Теперь в теории все это звучит просто. Вот основной скрипт сборки:

<project name="Retain" basedir="." default="main">
  <target name="main">
    <ant dir="SharedJava" antfile="ant.xml" target="clean"/>
    <ant dir="SharedJava" antfile="ant.xml" target="copy_current"/>
    <ant dir="GWEasySoap" antfile="ant.xml" target="clean"/>
    <ant dir="GWEasySoap" antfile="ant.xml" target="copy_current"/>
    <ant dir="RetainLib" antfile="ant.xml" target="clean"/>
    <ant dir="RetainLib" antfile="ant.xml" inheritAll="false"  target="copy_current"/>
    <ant dir="RetainIndex" antfile="ant.xml" target="clean"/>
    <ant dir="RetainIndex" antfile="ant.xml" target="copy_current"/>
    <ant dir="RetainPersist" antfile="ant.xml" target="clean"/>
    <ant dir="RetainPersist" antfile="ant.xml" target="copy_current"/>
  </target>
</project>

Что на самом деле происходит:

Первые несколько подпроектов работают нормально. RetainLib, который, на самом деле, должен иметь ссылку на банку SharedJava, затем терпит неудачу, жалуясь о том, что он не может его найти. Когда я удалил RetainLib, RetainIndex потерпел неудачу, жалуясь на то, что вы не должны использовать дженерики в целевом файле 1.4.

После игры я решил, что они настаивают на запуске цели компиляции внутри ant-commons вместо переопределенной.

Почему? Как я могу обойти это? (Изящно, я имею в виду - очевидно, я мог бы полностью отказаться от использования муравьиного обыкновенного, и держу пари, что все будет работать.)

Ответы [ 3 ]

1 голос
/ 13 июня 2009

Я работал над проектом, похожим на этот, и все, что было сделано, - это создание директории для сборки, в которую были помещены выходные данные всех задач ant, все работало нормально. Без дополнительной информации о том, что происходит внутри файлов сборки, будет сложно предоставить дополнительную информацию

1 голос
/ 18 апреля 2009

Я бы предложил использовать атрибут inheritAll = "false" в задачах. Проблема, которую вы видите, связана с тем, что basedir и другие свойства мастер-файла вызывают проблемы с относительными путями подпроектов.

Я бы также потерял атрибут dir = ".." , чтобы обеспечить победу основателей подпроекта.

Так вот, что бы я сделал ...

<project name="Retain" basedir="." default="main">
  <target name="main">
    <ant antfile="SharedJava/ant.xml" target="clean" inheritAll="false"/>
    <ant antfile="SharedJava/ant.xml" target="copy_current" inheritAll="false"/>
    <ant antfile="GWEasySoap/ant.xml" target="clean" inheritAll="false"/>
    <ant antfile="GWEasySoap/ant.xml" target="copy_current" inheritAll="false"/>
    ...
  </target>
</project>
0 голосов
/ 08 июня 2009

Каждый звонок открывает новый экземпляр муравья. Даже если «SharedJava» делает некоторые переопределения в ant-commons.xml, другие скрипты не видят его. Вы можете попытаться включить ant-commons.xml в базовый скрипт и использовать значения в подстанциях, потому что некоторые наследуются. Для не наследуемых значений, таких как пути, вы можете использовать что-то вроде именованных параметров:

<ant antfile="${check.build.file}" target="validateXml">
   <property name="p.check_dir" location="${project.base.dir}" />
   <property name="p.dtd_dir" location="${build.data.dir}" />
</ant>

Я предпочитаю, чтобы в задачах внешних сценариев не было зависимостей, кроме тех, которые выражаются как параметры для их вызовов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...