Если ProjectY может жить, ничего не зная о ProjectX (что может быть в случае, если это плагин для X), не может быть суперпроектом.
Если требуется, чтобы X был каким-то образом завершен, тогда да, это мог бы быть суперпроект, чтобы ссылаться на X в его дереве (как объяснено в истинной природе подмодулей ).
В компонентном подходе истинным суперпроектом будет третий проект, который ссылается на правильную версию ProjectY и ProjectX для записи точной конфигурации (то есть списка исправления), необходимые для работы всего проекта.
ОП добавляет правильный вопрос: где хранится зависимость (от Y до X)?
Если кто-то использует компонентный подход и имеет суперпроект ProjectZ, а ProjectY зависит от сборки ProjectX, не будем ли мы включать ProjectX в качестве подмодуля в репозиторий ProjectY, но только в ProjectZ?
Это будет означать, что ProjectY не может быть построен сам по себе, что делает его (из-за отсутствия красноречия) своего рода «подразумеваемым подмодулем».
Если у вас есть только 2 компонента, один из которых зависит от другого, конечно: вы можете напрямую объявить ProjectX как подмодуль ProjectY.
Но если ProjectY не может быть построен сам по себе, он все равно не является "завершенным" (как в "автономном") проектом.
Следовательно, глобальный родительский «ProjectZ», где хранение этой информации о зависимостях вне ProjectY имеет свои преимущества:
- сделать пути к каждому модулю более видимыми непосредственно из корня ProjectZ (вместо того, чтобы хоронить ProjectX потенциально глубоко внутри ProjectY, делая эту зависимость менее видимой для клиентов ProjectY)
- объединение версий ProjectX (если несколько модулей нуждаются в ProjectX, то ссылка на него один раз в ProjectZ четко объявляет «одну официальную версию» ProjectX, которую должны использовать все остальные модули)