¿Mejor práctica de Maven para generar múltiples frascos con clases diferentes / filtradas?

Desarrollé una biblioteca de utilidades Java (similar a Apache Commons) que uso en varios proyectos. Además de los clientes gordos, también lo uso para clientes móviles (PDA con perfil J9 Foundation). Con el tiempo, la biblioteca que comenzó como un solo proyecto se extendió en múltiples paquetes. Como resultado, termino con mucha funcionalidad, que realmente no es necesaria en todos los proyectos.

Dado que esta biblioteca también se usa dentro de algunos proyectos móviles / PDA, necesito una forma de recopilar solo las clases utilizadas y generar los frascos especializados reales.

Actualmente en los proyectos que usan esta biblioteca, tengo tareas de Ant jar que generan (desde el proyecto de utilidad) los archivos jar especializados (por ejemplo: my-util-1.0-pda.jar, my-util-1.0-rcp.jar) utilizando las funciones de tarea de inclusión / exclusión. Esto se necesita principalmente debido a las limitaciones de tamaño en el archivo jar generado, para los proyectos móviles.

Al migrar ahora a Maven, me pregunto si hay mejores prácticas para llegar a algo similar. Considero los siguientes escenarios:

[1] - adicionalmente al artefacto de jarra principal (my-lib-1.0.jar) generando también en el interiormy-lib proyectar los artefactos separados / especializados usando clasificadores (ej:my-lib-1.0-pda.jar) utilizando Maven Jar Plugin o Maven Assembly Plugin filtrado / incluye. No me siento muy cómodo con este enfoque, ya que contamina la biblioteca con las demandas de los consumidores de la biblioteca (filtros).

[2] - Cree proyectos Maven adicionales para todos los clientes / proyectos especializados, que "envolverán" el "my-lib" y generarán los artefactos jar filtrados (por ejemplo:my-lib-wrapper-pda-1.0 ... etc). Como resultado, estos proyectos de envoltura incluirán el filtrado (para generar el artefacto filtrado) y dependerán solo del proyecto "my-lib" y los proyectos del cliente dependerán demy-lib-wrapper-xxx-1.0 en lugar demy-lib-1.0. Este enfoque puede parecer problemático ya que incluso eso dejará intacto el proyecto "my-lib" (sin clasificadores y artefactos adicionales), básicamente duplicará el número de proyectos ya que para cada proyecto de cliente tendré una lib, solo para recolectar lo necesario Las clases de la biblioteca "my-util" (proyecto "my-pda-app" necesitarán un proyecto / dependencia "my-lib-wrapper-for-my-pda-app").

[3] - En cada proyecto de cliente que utiliza la biblioteca (por ejemplo:my-pda-app) agregue algunos complementos especializados de Maven para recortar (al generar el artefacto / paquete final) las clases que no se requieren (por ejemplo: maven-assembly-plugin, maven-jar-plugin, proguard-maven-plugin).

¿Cuál es la mejor práctica para resolver este tipo de problemas en la "forma Maven"?

Respuestas a la pregunta(1)

Su respuesta a la pregunta