Что делать, когда ваш процесс сборки муравья попадает под контроль версий - PullRequest
2 голосов
/ 21 октября 2008

Итак, у меня есть хороший Java-проект, сборка с Ant в папку / dist.
Весь проект находится под контролем версий, поэтому я могу развернуть последнюю версию, просто 'svn export' по пути к папке dist.
Но моя сборка продолжает удалять папки .svn внутри моей папки dist и всех ее зависимых элементов, потому что она очищает папку при сборке, а не просто перезаписывает. Точный виновник - JarBundler, задача Ant, которая создает мой пакет mac.app - он удаляет папку всего пакета перед его повторным созданием.
Это, очевидно, сбивает с толку мою SVN, потому что все папки .SVN теперь отсутствуют для этой папки, и поэтому он говорит, что конфликтует

У кого-нибудь есть идеи, как мне это решить? Я не могу понять, как остановить jarbundler от удаления всего, так что я собираюсь сделать что-то более хакерское, я боюсь. Я тоже новичок в Ant, просто для справки.

Ответы [ 5 ]

3 голосов
/ 21 октября 2008

Наличие dist в управлении источниками может считаться хорошей практикой, если вы хотите, чтобы ваша система управления источниками была уникальной ссылкой для всех:

  • 1010 * Разработчики *
  • ассемблеры (юнит-тестирование)
  • омологационные тестеры (вы запрашиваете кучу dist на своей платформе интеграции и проводите там свои нерегрессионные тесты, perfs тесты, стресс-тесты и т. Д.)
  • менеджеры выпуска продукции ...

НО у вас должен быть правильный процесс освобождения, чтобы справиться с этим.

В вашем случае, build должен находиться в отдельном и частном каталоге , то есть каталоге, не входящем в subversion. Когда сборка в порядке, вы импортируете в subversion, если это официальный релиз, или импортируете его в общий каталог, если это временная сборка просто необходим следующей команде (таким образом, избегая сотен сборок в SCM, используя пространство для ничего).

Примечание: главное преимущество наличия доставки (dist) в вашем SCM состоит в том, чтобы зависимый проект работал не с вашими источниками, а напрямую с вашей доставкой (которая является Обязательно в тот или иной момент приступить к работе): если им удастся заставить свой код работать, компилируя с вашей доставкой, шансы их собственного дистрибутива при развертывании с вашей будут работать.
Таким образом, другие команды получают доступ к вашей доставке (ваш «myProject.jar»), когда они получают доступ к любому из своих источников: они могут через SCM прочитать версию вашего jar, его дату, его историю, его метаданные, его метку и и так далее.

Тем не менее, для одного небольшого монолитного (как «ни один другой проект не зависит от него») можно утверждать, что dist (окончательная пакетная поставка) может быть перестроена по требованию и сохранена во внешнем справочная система , например, внешний репозиторий Maven.
НО: Maven не является репозиторием SCM, это означает, что вам нужно подписать свой jar ('MyProject-1.0.jar'), у вас нет истории, и вам необходимо сообщать все свои метаданные в отдельном текстовом файле во время доставки. Любой другой проект, имеющий доступ к этой доставке в этом репозитории Maven, должен настроить свои сценарии и пути к классам в соответствии с соглашением об именах версий.
Кроме того, Maven - это еще один репозиторий в вашей архитектуре разработки. Всякий раз, когда вы можете уменьшить количество репо до минимума ('1';)), это лучше.

0 голосов
/ 14 ноября 2008

Я бы согласился, что не очень хорошая практика - встраивать продукты в SVN.

При этом, если у вас есть какие-то требования для этого, которые вы не можете обойти, вы можете использовать одну из более современных систем контроля версий, таких как Git, Bazaar и Darcs (есть другие, но я использовал эти три ).

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

0 голосов
/ 22 октября 2008

Хорошо, спасибо всем. Теперь я понимаю, почему с философской точки зрения хорошей идеей будет продолжать сборку из SCM, и буду помнить об этом в будущем. Однако практически, в этом случае я единственный разработчик в этом коротком (4 недели) проекте. Я использую svn для легко обновления сборки выпуска на общедоступном веб-сервере через низкоскоростное соединение, так что дифференциальное обновление необходимо. Поскольку никто не предложил простую альтернативу обновлению сборок для удаленного развертывания, я придумал этот хакерский взлом, чтобы избежать моей проблемы:

Скажите, что моя версионная папка сборки - / dist. Хорошо, я говорю моему скрипту сборки, чтобы он собирался в / dist-tmp, затем рекурсивно копировал все файлы из / dist-tmp поверх / dist, и, наконец, удалял /dist-tmp.

В моем скрипте сборки Ant было несколько дополнительных строк, и он прекрасно работает.

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

@ VonC получает галочку ответа за лучшее объяснение философии.

0 голосов
/ 21 октября 2008

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

Если вы хотите проверить продукты сборки, скопируйте их в другое место (возможно, в каталог «pre-build») и зарегистрируйте их оттуда.

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

0 голосов
/ 21 октября 2008

Simple. Не проверяйте вход / расстояние для контроля версий.

Контроль версий действительно не должен иметь никакого сгенерированного кода / binaries / jars / what-have-you.

...