2011-01-21 3 views
7

Necesito hacer uso de jar adicionales durante la ejecución del programa. Añado manualmente los frascos a la carpeta relativa ./lib y luego ejecuto el programa. ¿Cómo debería definir el classpath en el archivo de manifiesto?¿Cómo usar la expresión regular en el classpath del manifiesto java?

+0

¡Tengo una solución! Incluiré variables como: Class-Path: lib/externaljar1.jar lib/externaljar2.jar etc hasta 5 o 10 valores. Luego, aunque incluya jarras durante el tiempo de ejecución, simplemente renómbrelas como externajar1, externaljar2, etc. y cópielas a la carpeta lib. ;-) – Suraj

+0

Agradezco a cada1 que respondió mi consulta. ¡Muchas gracias! – Suraj

Respuesta

11

No puede usar expresiones regulares u otros comodines en el atributo Class-Path de su manifiesto.

Sólo hay un comodín apoyado en Java, y que sólo funciona en si se especifica en la línea de comandos en un "manual" java invocación (es decir, no utilizando -jar): using directoryname/*.

+0

¿Hay algún otro enfoque que no sea usar el comando -cp o la función de cargador de clases? – Suraj

+0

@Suraj: preguntar acerca de otros enfoques sin decirnos por qué esos enfoques no son buenos para usted es ... bastante inútil. Y personalmente, me parece bastante grosero también. –

+0

¡Lo siento! En realidad estoy programando el código para un enfoque fácil de usar y desplegando el mismo en un contenedor ejecutable. Es tener una base de datos genérica donde el usuario puede elegir su base de datos. Por lo tanto, necesita especificar el tarro de conectividad necesario y ponerlo en la carpeta accesible del programa. Pensé que si podía usar la expresión regular en el classpath de manifiesto como lib/* OR lib/*. Jar para que cuando el programa se ejecuta encuentre todos los archivos jar. – Suraj

2

que no estoy muy seguro de lo que quiere exactamente, pero se puede añadir frascos durante el tiempo de ejecución:

lista
  • (JAR) utilizando File.list() en el directorio que contiene los frascos
  • hacer una expresión regular en los nombres de archivo se recupera
  • utilizar un URLClassLoader para cargar el frasco

no sé exactamente cómo registrar (si es necesario) los URLClassLoaders para el cargador de clase principal. Pero esa es la forma en que creo que iría.

+2

No puede modificar el cargador de clases bootstrap dentro de la especificación (hay hacks feos que pueden hacerlo, usando 'addURL()'). La solución conforme a las especificaciones sería poner solo la clase Boostrapping en su propio jar, usar eso para encontrar todos los otros jar (incluido el jar principal "real") y cargar todos los que estén en un cargador de clases. Luego llame al método principal real de la clase principal real. –

Cuestiones relacionadas