Сборка PDE с Ant очень медленная по сравнению с Eclipse

У меня очень большой проект OSGi с 300 пакетами. Когда я импортирую проект в Eclipse и делаю Project -> Clean... а также Project -> Build All требуется около 10 минут, пока все не будет собрано, и я могу запустить свое приложение.

Я думаю, что 10 минут - это уже довольно долго, но когда я выполняю сборку PDE без головы с помощью скриптов Ant, это занимает около часа! Я думаю, что-то идет не так...

Есть ли у вас подсказка для меня, как ускорить сборку на основе Ant? Или как отследить проблему? Я использую обычную сборку PDE с помощью команды, как показано ниже. Я понятия не имею, почему это намного медленнее по сравнению с полной сборкой в ​​Eclipse.

java -jar eclipse/plugins/org.eclipse.equinox.launcher_<version>.jar -application org.eclipse.ant.core.antRunner -buildfile  eclipse/plugins/org.eclipse.pde.build_<version>/scripts/build.xml -Dbuilder=<path to the build configuration folder>

Спасибо Томас

PS: я знаю, что вопрос очень общий, но даже подсказка, как найти недостаток производительности, будет полезна.

2 ответа

Решение

Ожидается то, что вы видите, потому что вы (вероятно) сравниваете две разные вещи:

При форсировании перестройки в Eclipse IDE вы просто компилируете все java-файлы. (Для нашего проекта из 270 пакетов это занимает около 1-2 минут.)

При сборке с помощью PDE-build вы также упаковываете продукт (генерируете пакеты и функции, разрешаете зависимости плагинов, JAR-все и т. Д.), И это занимает гораздо больше времени. (Для нашего проекта это занимает около 6-7 минут.) Эквивалентностью этого в среде IDE будет открытие файла.product, а на вкладке "обзор" в редакторе вы выбираете "мастер экспорта продукта eclipse".

Что касается советов о том, как ускорить сборку: я не знаю ни одной серебряной пули. Но: ищите "затмение сборки Tycho" и / или смотрите http://www.vogella.com/tutorials/EclipseTycho/article.html и https://eclipse.org/tycho/. Другими словами: вы можете изменить свою сборку на использование Tycho, что позволяет вам создавать каждый плагин отдельно (и постепенно, если хотите).

Я работаю над большим проектом RCP с около 50 000 классов, распределенных по 850 проектам / пакетам в рабочей области (с таким же количеством пакетов на целевой платформе). У нас есть твердотельные накопители как на наших настольных компьютерах, так и на серверах Jenkins для ускорения сборки. Сборки намного быстрее в Linux, чем в Windows. Обновление и очистка рабочего пространства Windows занимает около 2-3 минут, в то время как полная сборка без поддержки Linux занимает около 25 минут (в Windows это более часа).

Процесс безголовой сборки PDE не очень эффективен, и он делает много сумасшедших операций ввода-вывода. В начале сборки обычно сценарии приостанавливаются на несколько минут на этапах "generateScript" и "generateFeature". Если вы профилируете их, вы увидите, что миллионы операций чтения для файлов build.properties вычисляются по дереву зависимостей (я получил 46 миллионов операций чтения для ~1000 build.properties, а затем решил остановиться), поэтому что-то не так, В настоящее время в Eclipse фактически отказались от системы сборки PDE Headless в пользу Tycho, поэтому я сомневаюсь, что она будет рассмотрена.

Если у вас есть возможности Eclipse, убедитесь, что эти включения являются нормальными - включив одну и ту же функцию в нескольких местах, мы обнаружили, что описанные выше этапы generateScript / generateFeature могут занять гораздо больше времени, чем необходимо.

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

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

Другие вопросы по тегам