2008-09-28 8 views
5

У нас есть большая база кода, которая занимает около 12 минут на машинах разработчика, чтобы автоматически генерировать некоторые классы Java 5 с использованием JavaCC, а затем компилирует все классы, а также запуск теста единиц.Советы по ускорению времени сборки на Linux с использованием ANT, Javacc, JUnit и компиляции классов Java

Проект состоит из нескольких проектов, которые могут быть построены в группах, но мы стремимся к полной сборке в возрасте до 10 минут

Каких советов есть для сокращения этого времени сборки?

Благодаря

+0

Если я правильно понимаю, вы» re, стремясь к чистой сборке (т. е. с нуля), чтобы занять менее 10 минут. Однако почему вам нужно выполнять полную перестройку так часто? Просто любопытно здесь. – Alexander 2008-09-28 23:14:25

+0

Его часть нашего процесса. Мы стараемся поддерживать постоянную рабочую сборку совершенного кода. У нас есть шляпка сборки, которая постоянно строится при совершении нового кода. Кроме того, большинство разработчиков на нашем месте запускает полную сборку своего кода перед проверкой. Те, которые не рискуют сломать сборку. – 2008-09-29 20:29:46

+0

По моему опыту, у вас проблемы с политикой запуска полной сборки/теста перед каждой фиксацией. Это не позволит разработчикам делать мелкомасштабные коммиты. Не говоря уже о досаде, в которой вы ждали 12 минут, а затем обнаружил, что за последнее время произошло больше коммитов. – Alexander 2008-09-29 20:44:13

ответ

3

Одно быстрое решение, что может бриться некоторое время, чтобы убедиться, что вы работаете в Ant с помощью JVM сервера (по умолчанию он использует клиент VM). Установите ANT_OPTS для включения «-сервера».

2
  • Профиль процесса сборки и посмотрите, где узкие места. Это может дать вам некоторые идеи относительно того, как улучшить процесс.
  • Попробуйте параллельно строить независимые проекты на многоядерных процессорах. В качестве расширения этой идеи вы можете посмотреть вокруг Java-эквивалента distcc (не знаю, существует ли он) для распространения вашей сборки по нескольким машинам.
  • Получите лучшие машины.
0

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

Если ваш проект разбит на более мелкие проекты (подсистема базы данных, протоколирование в качестве примеров), вам может быть интересно использовать что-то вроде maven для обработки сборки. Вы можете запускать каждый кусочек меньшего размера как отдельный проект или модуль, и maven сможет поддерживать то, что нужно построить, если изменения существуют. В этом сборке можно сосредоточиться на основной части вашего проекта, и это не займет почти столько времени.

0

Что такое разбивка по времени провел:

  1. генерации классов
  2. компиляции классов
  3. запуска тестов

В зависимости от вашего проекта, вы можете увидеть значительное увеличение время сборки, выделяя размер большой кучи в javac (memoryMaximumSize) и junit (maxmemory).

1

Попробуйте вдохновить прагматичного программиста. Компилируйте только то, что необходимо, имеют два или более набора тестов. Один для быстрых тестов, другой для полных тестов. Подумайте, нужно ли каждый раз использовать каждый шаг сборки каждый раз. Нужно попытаться использовать jikes-компилятор вместо javac. После того, как проект охватывает несколько сотен классов, я переключаюсь на jikes, чтобы улучшить скорость. Но имейте в виду потенциальные проблемы несовместимости. Не забудьте включить все в одну цель, чтобы выполнить каждый шаг с полной перестройкой и полным тестированием проекта.

1

Теперь, когда вы объяснили процесс более подробно, вот еще два варианта:

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

  2. Измените разбиение на подпроекты, чтобы было труднее разбить один проект, изменив другой. Это должно сделать менее важным сделать полную сборку перед каждой фиксацией. Только коммиты, затрагивающие чувствительные подпроекты, или те, которые охватывают несколько проектов, затем должны быть «проверены» с помощью полной сборки.

0

Это очень важно, чтобы построить весь длится менее чем за 10 минут? Если вы создадите независимые друг от друга подпроекты, вы можете работать над одним подпроектом, предварительно скомпилировав другие (подумайте, что Maven или Ivy управляют зависимостями).

Другое решение (и если ваши модули достаточно стабильны) заключается в том, чтобы рассматривать ваши подпроекты как автономные проекты. Каждый проект затем будет следовать своему циклу выпуска и будет доступен из локального хранилища Maven/Ivy. Это, конечно, хорошо работает, если хотя бы части проекта достаточно стабильны.

1

несколько советов для сокращения времени сборки:

  1. сделать меньше работы. , например. удалить ненужный протоколирования/вторя файлы и консоли

  2. сделать вашу сборку «инкрементальной». Скомпилировать только классы изменений.

  3. устранить дублирующее усилие. Проще сказать, чем сделать, но если вы запустите , то в режиме отладки («ant -debug») вы можете увидеть избыточные задачи или цели.

  4. избегать дорогостоящих операций. копирование файлов и упаковки банок в войны необходимы для release.Signing баночки дорого и должно быть сделано только, если это возможно «для этапных релизов, а не каждый строить