que tienen un programa que necesita varias bibliotecas de terceros, y en el momento en que se envasa este modo:¿Cuál es la mejor práctica para incluir archivos jar de terceros en un programa Java?
zerobot.jar (my file) libs/pircbot.jar libs/mysql-connector-java-5.1.10-bin.jar libs/c3p0-0.9.1.2.jar
Por lo que yo sé la "mejor" manera de manejar librerías de terceros es poner ellos en el classpath en el manifiesto de mi archivo jar, que funcionará multiplataforma, no ralentizará el lanzamiento (lo que puede combinarlos) y no se topa con problemas legales (lo que podría hacer el reempaquetado).
El problema es para los usuarios que suministran las bibliotecas de terceros ellos mismos (por ejemplo, caso de uso, actualizándolos para corregir un error). Dos de las bibliotecas tienen el número de versión en el archivo, lo que agrega problemas.
Mi solución actual es que mi programa tiene un proceso de arranque que crea un nuevo cargador de clases y ejemplifica el programa adecuado al usarlo. Este cargador de clases personalizado agrega todos los archivos .jar en lib/a su classpath.
Mi forma actual funciona bien, pero ahora tengo dos cargadores de clases personalizados en mi aplicación y un cambio reciente en el código ha causado problemas que son difíciles de depurar, por lo que si hay una manera mejor me gustaría eliminar esto complejidad. También parece una sobreingeniería para lo que estoy seguro es una situación muy común.
Entonces mi pregunta es, ¿cómo debería estar haciendo esto?
@ZoFrex: ¿por qué usar un nuevo cargador de clases? ¿Por qué no simplemente usar el cargador de clases predeterminado que siempre es un URLClassLoader (AFAIK)? De esa forma solo tendrías un cargador de clases. Así es como lo estoy haciendo y estoy enviando cientos de máquinas con sistema operativo X y Windows (si no toca el ventilador, cambiaría la forma en que lo estoy haciendo;) – SyntaxT3rr0r
Uso realmente un URLClassLoader . Creé uno nuevo para inyectar el classpath dinámico, no puedes alterar el classpath predeterminado. El segundo cargador de clases que escribí anteriormente, para el sistema de complementos. – ZoFreX