2009-04-14 3 views
2

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

Например, один из проектов перекрывает compile цель, чтобы установить classpath соответствующим образом и установить source и target до 1,5 (АНТ-Обще использует 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 не смог, скуля о том, как вы не должны использовать generics в файле цели 1.4.

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

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

ответ

1

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

Я также потерял бы атрибут 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

Nope. Сожалею. Ваш совет в точности неправильный, по крайней мере, от результата. 1. Если dir удален и inheritFalse, сборка завершится неудачно, потому что скрипт ant.xml теперь запутан в отношении его каталога. 2.С восстановлением dir в его славное и законное место :) и inheritFalse сборка завершается неудачно, точно так же, как описано. – 2009-04-18 07:20:52

0

Каждые вызовы открывает новый экземпляр АНТ. Даже если «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> 

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

1

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

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