Я разработал библиотеку утилиты Java (аналогично Apache Commons), которую я использую в различных проектах. Помимо жирных клиентов я также использую его для мобильных клиентов (PDA с профилем J9 Foundation). Со временем библиотека, которая начиналась как единый проект, распространялась по нескольким пакетам. В результате я получаю много функциональности, но не очень во всех проектах.
Так как эта библиотека также используется внутри некоторых мобильных/PDA-проектов, мне нужен способ собирать только используемые классы и генерировать фактические специализированные банки
В настоящее время в проектах, которые используют эту библиотеку, у меня есть задачи Ant jar, которые генерируют (из проекта утилиты) специализированные файлы jar (например: my-util-1.0-pda.jar, my-util-1.0 -rcp.jar), используя функции задачи включения/исключения jar. Это в основном необходимо из-за созданных ограничений размера jar для мобильных проектов.
Мигрируя теперь к Maven, я просто задаюсь вопросом, есть ли какие-то лучшие практики, чтобы прийти к чему-то подобному, поэтому я рассматриваю следующие сценарии:
[1] - дополнительно к основному артефакту jar (my-lib-1.0.jar), также создающему внутри проекта my-lib отдельные/специализированные артефакты с использованием классификаторов (например: my-lib-1.0-pda.jar) с использованием Maven Jar Plugin или Maven Assembly Plugin, который включает в себя/включает... Мне не очень нравится этот подход поскольку он загрязняет библиотеку требованиями пользователей библиотеки (фильтры)
[2]. Создайте дополнительные проекты Maven для всех специализированных клиентов/проектов, которые будут "обертывать" "my-lib" и создавать фильтрованные артефакты jar (например: my -lib-wrapper-pda-1.0... и т.д.). В результате эти проекты-оболочки будут включать фильтрацию (для создания фильтрованного артефакта) и будут зависеть только от проекта "my-lib" , а проекты-клиенты будут зависеть от my-lib-wrapper-xxx-1.0 вместо my-lib-1.0. Такой подход мой взгляд проблематичен, так как даже это позволит реализовать проект "my-lib" (без дополнительных классификаторов и артефактов), в основном удвоит количество проектов, поскольку для каждого проекта клиента у меня будет один, чтобы собрать необходимые классы из библиотека "my-util" (проект "my-pda-app" ) будет иметь проект/зависимость "my-lib-wrap-for-my-pda-app" )
[3]. В каждый клиентский проект, который использует библиотеку (например: my-pda-app), добавьте некоторые специализированные плагины Maven для обрезки (когда создавая конечный артефакт/пакет) ненужные классы (например: maven-assembly-plugin, maven-jar-plugin, proguard-maven-plugin)
Какова наилучшая практика для решения таких проблем в "Maven way"?!