2009-06-09 5 views
9

Я разочаровался в альтернативах Groovy, основанным на Ant. AntBuilder не работает из Eclipse, плагин Groovy для Eclipse разочаровывает, и Gradle просто еще не готов.Замена build.xml с помощью Build.java - использование библиотек Java и Ant в качестве системы сборки

Документация Ant содержит раздел «Использование задач Ant вне Ant», который дает тизеру о том, как использовать библиотеки Ant из кода Java. Там еще один пример здесь:

http://www.mail-archive.com/[email protected]/msg16310.html

В теории, кажется, достаточно просто заменить build.xml с Build.java. В документации к Ant содержатся некоторые недокументированные зависимости, которые мне нужно будет обнаружить (недокументированные с точки зрения использования Ant из Java).

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

Кто-нибудь пытался писать файлы на Java, используя библиотеки Ant?

+0

Почему вы не считаете, что Gradle готов? – tronda

+0

+1 Я тоже планирую сделать это. Сетчатый муравейник утомительно. – amarillion

+0

Для всех, кто обеспокоен этим ... есть более широкая дискуссия с дополнительной информацией здесь: http://ant.1045680.n5.nabble.com/Replacing-build-xml-with-Build-java-Doing-Ant- builds-direct-from-Java-td1354956.html – ricosrealm

ответ

7

Наша система сборки основана, в первую очередь, на том, что вы описываете, и она очень хорошо работает. Мы используем задачи Ant (особенно задачи манипулирования файлами) из пользовательских java-программ, которые собирают приложение, используя автоматическое обнаружение компоновки прикладного модуля на основе конвенций.

Может быть, нужен некоторый клей Ant XML, чтобы делать что-то вроде компиляции самих скриптов сборки и фактически вызывать Java для выполнения сборки, но это незначительно.

Не только java более читабельна, чем Ant, особенно когда речь идет об условном исполнении, но это намного быстрее. Наша сборка на основе Ant использовала минуту или около того для сборки EAR, теперь версия на основе Java занимает около 5 секунд.

+0

Да , Я мог бы видеть, что использование маленького скрипта Ant для сборки и выполнения Build.java было бы удобно. Я мог бы иметь разные цели в файле build.xml для передачи различных аргументов в «java Build arg1 arg2 ...», соответствующих различным целям, которые вы имели бы в более крупном файле build.xml. Были ли найдены недокументированные/неожиданные зависимости при использовании Ant от Java, т.е. иметь проект с объектами Target? –

+0

Да, задачам Ant требуется определенное количество сантехники, но их легко обмануть. Мы закончили создание подклассов каждой задачи Ant, которую мы хотели использовать, предоставляя более удобный и гибкий API для использования сценариев сборки и скрывая механику инъекции таких вещей, как Project. Ничего не вызвало у нас никаких проблем. – skaffman

+1

Звучит здорово. Есть ли у вас какие-либо планы с открытым исходным кодом или, по крайней мере, обеспечить высокий уровень вашей системы сборки? –

0

Хотя я полагаю, что это возможно, вам, вероятно, будет лучше работать с командами оболочки, а затем написать полную программу java, чтобы просто автоматизировать сборки.

Вам не хватало бы одного из ключевых применений для муравья, которые являются легкими для чтения наборами файлов и легко читаемыми в свойствах.

Я застрял с муравьем, так как Groovy слишком близок к написанию всего приложения, чтобы просто создать ваше реальное приложение. Слишком сложно для неприятностей.

+0

Иногда файлы Ant build.xml становятся самостоятельным подпроектом. Сборка может быть сложной, слишком сложной для xml. –

2

Учитывая, что Java скомпилирован, это своего рода проблема с курицей и яйцом. Вам нужно построить Build.java для создания вашего проекта.

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

РЕДАКТИРОВАТЬ: В ответ на многочисленные комментарии Дина, если ваша сборка состоит из строгого длительного действия, то вам действительно не нужен скрипт сборки ant. Тем не менее, сила скрипта сборки заключается в том, что он гарантирует, что зависимости выполняются только один раз, при этом допускаются многоступенчатые точки входа, что далеко не тривиально, если вы откатываете свои собственные.

Если вам не нравится формат XML, вы не одиноки, автор ANT соглашается с вами. Однако, если ваше представление о процессе сборки - это то, что можно запустить с вашей среды IDE в качестве единственной точки запуска, я бы сказал, что ваши потребности в сборке довольно просты.

EDIT2: Я поддержал ответ скаффмана, потому что он говорит непосредственно на вопрос. В комментариях мы, похоже, согласны с тем, что подход подходит для процедурной сборки, но не будет работать для декларативного, и вам понадобится хотя бы немного ANT xml, чтобы заставить мяч катиться с вашей Build.java, чтобы избежать курения и проблема с яйцом. Это, похоже, доходит до сути дела.

+0

Нет проблемы с курицей и яйцом. Создайте и выполните Build.java из Eclipse или любой другой среды, которую вы используете. Задача Ant

2

У вас была прекрасная идея.У Cliff Click была аналогичная идея: http://blogs.azulsystems.com/cliff/2008/01/i-hate-makefile.html

Если вы это сделаете, я советую вам максимально упростить ее, чтобы ваша система сборки не нуждалась в [нетривиальной] системе сборки.

+0

Не должно быть больше файлов Build.java, чем файлов build.xml для любого данного проекта. В большинстве случаев Build.java на верхнем уровне - это все, что было бы. Моя концепция просто использует Ant от Java вместо XML-файла. –

+0

Ссылка на блог Клиффа сломана, но я нашел build.java от Cliff на github: https://github.com/edwardw/high-scale-java-lib/blob/master/build.java –

2

Важный момент, похоже, потерялся здесь.

Ant написан на Java, и то, что я ищу, является лучшим способом использования задач Ant (API в библиотеках Ant), чем через xml. В моей жизни я не вижу, как использование xml для вызова Java всегда будет лучше или проще, чем использование Java для вызова Java.

Единственное препятствие заключается в том, что подход xml документирован, тогда как подход Java не документирован, поэтому мне придется загрузить и ознакомиться с кодом Ant.

Я сдержался после публикации этого вопроса в течение нескольких недель, потому что я был уверен, что кто-то сделал это раньше и что мой google-foo просто нуждается в улучшении. Просто кажется очевидным использование Java для вызова API-интерфейсов Ant вместо xml, что я все еще удивляюсь, что не существует параллельного подхода на основе Java, разработанного для Ant, а также для xml-подхода.

Просто потому, что это очевидно, это не значит, что кто-то сделал это раньше.

+0

Кто-то _has_ сделал это раньше. Это называется Ant;) – GreenGiant