2013-07-21 2 views
1

Мой проект Java имеет зависимость от сторонней библиотеки, назовем его xyz.jar. Мой проект поддерживается в git и xyz в svn. xyz включен в мой проект как зависимость Maven, так что он автоматически загружается как часть процесса сборки.Сохранение исправлений сторонних зависимостей библиотеки Java

Мне нужно внести небольшие изменения в источник xyz, но все же хотите получать обновления от разработчиков проекта. Какие у меня варианты?

В настоящее время, лучший вариант, как представляется, это:

  1. форк СВН репо для АБВ в новый мерзавца репо с использованием git svn clone.
  2. Взломать git репо.
  3. Создайте xyz-hacked.jar из git repo и экспортируйте артефакт на сервер библиотеки maven.

Когда новые изменения выходят за xyz, я могу сделать git svn rebase, чтобы сохранить актуальность моего git repo.

Каковы лучшие практики здесь? Могу ли я улучшить этот подход?

Редактировать

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

Gradle

Я не думаю, что это Gradle-конкретный вопрос, но только в том случае, если есть Gradle-конкретный ответ: Я использую Gradle включить xyz.jar как «компилировать» зависимость.

+0

Возможно, вы просто попробуете и предложите свою модификацию для сопровождающих/записи библиотеки XYZ? конечно, если что-то вам полезно, это может быть полезно для других. – radai

+0

Hi, radai. Я определенно рассмотрел это и, вероятно, сделаю это в конце концов. Моя основная проблема заключается в том, что в краткосрочной перспективе мне понадобится решение для костылей, пока мои изменения ждут одобрения. –

+0

Возможный дубликат [Поддержание пользовательских патчей на стороннем коде] (http://stackoverflow.com/questions/14397188/maintaining-custom-patches-on-third-party-code) – lesmana

ответ

0

Я думаю, вы должны рассмотреть следующие вопросы в отношении вашего подхода:

  • Вы не знаете, как exacltyy проект maintainters будет изменять исходный код. Поэтому, в то время как вы сможете применять большинство обновлений с помощью rebase, в какой-то момент вы столкнетесь с конфликтом, который вам придется ресолять вручную.
  • Эта сторонняя библиотека, вероятно, не меняется очень часто. Даже если это произойдет, это не означает, что вам нужно обновлять свою зависимость неизмеримо. Зачем? В этой библиотеке может быть много и много обновлений, которые никак не влияют на ваш код. Так зачем беспокоиться об этом?

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

+0

Пожалуйста, ознакомьтесь с изменениями к моему вопросу и моим комментировать ответ Джима Гаррисона. –

1

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

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

Для каждой перестановки потребуется ручное слияние и полное тестирование регрессии в сторонней библиотеке И ваши приложения, которые зависят от библиотеки.

По определению это не может быть автоматизировано.

+0

Да, это очень реальная проблема. Я знаю, что на этапе слияния кода должно быть вмешательство человека. Я ищу больше для рабочего процесса/инструментов, чтобы свести к минимуму боль при сохранении патча. –

Смежные вопросы