2010-07-14 2 views
3

Предположим, что проект X является базовым проектом, а Project Y зависит от X. Проект Y может быть плагином для Project X, или, возможно, это автономное приложение, которое требует Project X другим способом.Подмодули для плагинов или для зависимостей?

Я думал, все это время, что проект Y должен стать суперпроект, и проект X должен быть подмодулем проект Y.

Однако при чтении this, кажется, как будто мое мышление может быть перевернутым. В статье зависимость - это суперпроект и зависимый код (в данном случае плагины) - подмодули. Правильно ли это использовать подмодули?

ответ

2

Если ProjectY может жить, ничего не зная о ProjectX (это может быть так, что это плагин для X), это не может быть суперпроектом.

Если ему нужно X, чтобы как-то быть полным, то да, это может быть суперпроект, чтобы ссылаться на X внутри его дерева (как описано в true nature of submodules).

В component-based approach, истинный суперпроект будет третьим проектом, который ссылается на правильную версию ProjectY и ProjectX, чтобы записать точную конфигурацию (то есть список изменений), необходимую для проекта в целом на работу.


ОП добавить правильный вопрос: где хранится зависимость (от Y на X)?

Если один принимает подход на основе компонентов и имеет суперпроект ProjectZ и ProjectY имеет зависимость от ProjectX построить, мы не включаем ProjectX как подмодуль в хранилище ProjectY, но только в ProjectZ?
Это означало бы, что ProjectY не может быть построено самостоятельно, что делает его (из-за отсутствия красноречия) своего рода «подразумеваемым подмодулем».

Если у вас есть только 2 компонента, один в зависимости от другого, обязательно: вы можете прямо объявить ProjectX в качестве подмодуля ProjectY.

Но если ProjectY не может быть построена самостоятельно, это не является «полным» (как в «автономном») проекте.
Поэтому глобальный родитель «ProjectZ», где хранить эту зависимость информации вне ProjectY имеет свои преимущества:

  1. держать каждый модуль пути более заметными, непосредственно от корня ProjectZ (вместо того, чтобы хоронить ProjectX потенциально глубоко внутри ProjectY, делая что зависимость менее заметный для клиентов ProjectY)
  2. объединительных версий ProjectX (если несколько модулей необходимы ProjectX, ссылающегося его раз в ProjectZ четко рекламировать «одну официальную версию» ProjectX, что все остальные модули должны использовать)
+0

Спасибо за ваш проницательный ответ @VonC. Если вы берете компонентный подход и имеете суперпроект ProjectZ, а ProjectY имеет зависимость от ProjectX для сборки, не будем ли мы включать ProjectX в качестве подмодуля в репозиторий ProjectY, но только в ProjectZ? Это означало бы, что ProjectY не может быть построено самостоятельно, делая его (из-за отсутствия красноречия) своего рода «подразумеваемым подмодулем». Это нормально? –

+1

@Sam: лучше сохранить отдельный - если возможно - проект и его зависимости, чтобы: 1/сохранить все пути модулей более заметными, непосредственно из корня ProjectZ (вместо того, чтобы похоронить ProjectX потенциально глубоко в ProjectY, что делает зависимость, менее заметная для клиентов ProjectY) 2/объединение версий ProjectX (если для нескольких модулей требуется ProjectX, ссылаясь на него один раз в ProjectZ, ясно рекламируйте «одну официальную версию» ProjectX, которую должны использовать все остальные модули). Все, что сказано, всего за 2 модуля, вы можете напрямую записывать ProjectX в ProjectY. – VonC

+0

прекрасный. Спасибо за помощь! –

3

Это зависит, но в общем случае я бы сказал, что подмодули (или могут быть) для обоих.

Очевидно, что если проект Y является зависимостью (например, внешней библиотеки) проекта X, он должен быть подмодулем.

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

+0

Привет @ mipadi, спасибо за ваш inpu т. Интересно: существует ли способ отделить подмодули зависимостей от подмодулей плагина? Тогда репозиторий мог бы обеспечить проверку своих зависимостей (почему бы вам не захотеть их проверить?), В то время как проверки подмодуля плагина могут оставаться необязательными. –