Замена build.xml на Build.java - использование библиотек Java и Ant в качестве системы сборки - PullRequest
9 голосов
/ 10 июня 2009

Я разочаровался в альтернативах Ant на основе Groovy. AntBuilder не работает из Eclipse, плагин Groovy для Eclipse разочаровывает, а Gradle просто еще не готов.

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

http://www.mail-archive.com/dev@ant.apache.org/msg16310.html

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

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

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

Ответы [ 6 ]

7 голосов
/ 10 июня 2009

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

Вам может понадобится немного связующего Ant XML, чтобы делать такие вещи, как сами сценарии компиляции и фактически вызывать Java для выполнения сборки, но это незначительно.

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

2 голосов
/ 10 июня 2009

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

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

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

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

То, что это очевидно, не означает, что кто-то делал это раньше.

2 голосов
/ 10 июня 2009

У тебя была хорошая идея. У Клифф Клика была похожая идея: http://blogs.azulsystems.com/cliff/2008/01/i-hate-makefile.html

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

2 голосов
/ 10 июня 2009

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

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

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

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

РЕДАКТИРОВАТЬ2: Я проголосовал за ответ Скаффмана, потому что он говорит непосредственно на вопрос. В комментариях мы, похоже, согласны с тем, что подход хорош для процедурной сборки, но не будет работать для декларативной сборки, и что вам нужно хотя бы немного ANT xml, чтобы шарик развернулся с вашим Build.java, чтобы избежать курицы и проблема с яйцом. Похоже, в этом суть дела.

0 голосов
/ 10 июня 2009

Хотя использование задач Ant в программах Java довольно просто, я бы, вероятно, остановился на файлах сборки Ant. Если вы занимаетесь какой-то интересной разработкой, если Eclipse не делает то, что вам нужно, возможно, вам нужно искать в другом месте (IntelliJ, NetBeans и т. Д.).

0 голосов
/ 10 июня 2009

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

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

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

...