Для образовательных целей я настроил макет проекта следующим образом (плоский, чтобы лучше подходить к затмению):
-product
|
|-parent
|-core
|-opt
|-all
Родитель содержит агрегатный проект с core, opt и всем. Ядро реализует обязательную часть приложения. Опция является необязательной частью. Предполагается, что все объединит core с opt, и эти два модуля будут перечислены как зависимости.
Я сейчас пытаюсь сделать следующие артефакты:
- продукт-core.jar
- Продукт-ядро-src.jar
- продукт-ядро-с-dependencies.jar
- продукт-opt.jar
- продукт-неавтоматического src.jar
- продукт-неавтоматического с-dependencies.jar
- продукт-all.jar
- продукт-все-src.jar
- продукт-все-с-dependencies.jar
Большинство из них довольно просты в производстве. У меня есть некоторые проблемы с агрегирующими артефактами. Мне удалось создать product-all-src.jar с пользовательским дескриптором сборки в модуле «all», который загружает исходные коды для всех нетранзитивных deps, и это прекрасно работает. Этот метод также позволяет мне сделать product-all-with-dependencies.jar.
Однако недавно я обнаружил, что вы можете использовать цель source: aggregate в плагине source для агрегирования источников всего агрегатного проекта. Это также верно для плагина javadoc, который также агрегируется за счет использования родительского проекта.
Так что я разрываюсь между подходом «все» и отказом от модуля «все» и просто использую «родительский» модуль для всей агрегации. Кажется нечистым иметь некоторые совокупные артефакты, созданные в «родительском», а другие - во «всем». Есть ли способ сделать jar «product-all» в родительском проекте или объединить javadoc в «all» проекте? Или мне просто оставить оба?
Спасибо