Hay una opción de:..
- mantener el proyecto en un solo módulo y use dependencias opcionales.
- divide el proyecto en múltiples módulos; donde cada módulo tiene una dependencia (no opcional) en cualquier biblioteca;
Creo que lo primero tiene más sentido en la mayoría de los casos: los usuarios necesitan encontrar su camino en menos artefactos. Por lo general, deberán agregar menos dependencias nuevas a su pom. A menos que el código para admitir proyectos de terceros sea grande, esto también ayudará a mejorar los tiempos de descarga (menos viajes redondos). Con este último enfoque, puede encontrarse en situaciones incómodas donde el usuario ha definido su propio conjunto de versiones, pero solo para algunas de las dependencias de terceros.
Prefiero ver las dependencias opcionales en el pom (a veces miro para ver en qué versión está construido). Es cierto que algunas personas pueden no mirar. Creo que copiar y pegar fragmentos de pom en el sitio web es la mejor solución para eso. Por ejemplo, si tiene una página sobre la integración de Spring, puede poner el fragmento de pom relevante en esa página.
Sugeriría que las dependencias no libres (o cualquier cosa que no se pueda resolver fácilmente) se guarden en un módulo maven separado, para que los colaboradores siempre puedan construir el artefacto principal. (Tuve ese problema con Quartz, que IIRC tiene una dependencia opcional en un contenedor Oracle JDBC).
Editar: Si le preocupan los usuarios que ven NoClassDefFoundErrors, no haría ningún daño comprobar que la clase se puede resolver antes de intentar usarla. Por ejemplo, podría hacer una excepción y lanzar un mensaje de error más significativo que señale al usuario a la documentación. SLF4J es un buen ejemplo de esto.
** Actualización: ** sólo para aclarar, las cosas que estoy seguro acerca son - POM diseño - reflexión vs múltiples módulos vs vs tanto ... - autodiscovery o no de módulos adicionales si están presentes/si sí, cómo - ... –
Actualización: finalmente he llegado a escribir una publicación completa sobre este tema: http://www.axelfontaine.com/2012/08/opcional-dependencias-de-estrategia-para-java. html –