En cuanto a la dependencia, solo uso maven dependency copy plugin y copio todas las dependencias en una carpeta ./lib, y proporciono un script de inicio que usa el class path wildcard (de esa manera puede cambiar sus dependencias todo lo que quiera y no tenga para cambiar el script de inicio). En cuanto a los archivos de configuración, los puse en una carpeta ./config y los incluyo de nuevo en el classpath de mi aplicación en el script de inicio (el primero admite que solo funciona para> java 1.6).
Así que al final casi todo mi aplicación tiene la siguiente estructura:
mystuff.jar launch.sh
./lib
./config
A continuación, voy a cerrar la cremallera de todo el asunto y darle a mis usuarios. Probablemente todo el proceso sea fácil de automatizar usando maven, pero confieso que lo hago a mano: p
Si lo prefiere y las licencias lo permiten, también puede agrupar todas las dependencias en un único contenedor (con dependencias expandidas dentro) usando el assembly plugin. Esto tiende a hacer que el tarro sea voluminoso y brindando a los usuarios una aplicación actualizada. más difícil. También tuve problemas varias veces debido a que se sobrescribieron los archivos de clase o algo así, por lo que personalmente me apego a la carpeta ./lib.