Ho un programma che ha bisogno di diverse librerie di terze parti, e in questo momento è confezionato in questo modo:Qual è la procedura migliore per includere file jar di terze parti in un programma Java?
zerobot.jar (my file) libs/pircbot.jar libs/mysql-connector-java-5.1.10-bin.jar libs/c3p0-0.9.1.2.jar
Per quanto ne so il modo "migliore" per gestire librerie di terze parti è quello di mettere loro sul classpath nel file manifest del mio file jar, che funzionerà su più piattaforme, non rallenterà il lancio (che potrebbe raggrupparli) e non incorrerà in problemi legali (quale potrebbe essere il riconfezionamento).
Il problema è per gli utenti che forniscono loro stessi le librerie di terze parti (esempio, caso d'uso, aggiornamento per correggere un bug). Due delle librerie hanno il numero di versione nel file, il che aggiunge fastidio.
La mia soluzione attuale è che il mio programma ha un processo di bootstrap che rende un nuovo classloader e crea un'istanza del programma che lo utilizza. Questo classloader personalizzato aggiunge tutti i file .jar in lib/al suo classpath.
mio attuale modo funziona bene, ma ora ho due classloader personalizzati nella mia richiesta e una recente modifica al codice ha causato problemi che sono difficili da eseguire il debug, quindi se c'è un modo migliore vorrei rimuovere questo complessità. Sembra anche un eccesso di ingegneria per quello che sono sicuro sia una situazione molto comune.
Quindi la mia domanda è, come dovrei fare questo?
@ZoFrex: perché utilizzare un nuovo caricatore di classe? Perché non utilizzare semplicemente il caricatore di classi predefinito che è sempre un URLClassLoader (AFAIK)? In questo modo avresti solo un caricatore di classe. Ecco come lo sto facendo e sto distribuendo su centinaia di macchine OS X e Windows (nel caso in cui colpisca la ventola, cambierei il modo in cui la sto facendo;) – SyntaxT3rr0r
In realtà uso un URLClassLoader . Ne creo uno nuovo per iniettare il classpath dinamico, non puoi modificare quello predefinito. Il secondo classloader che ho scritto in precedenza, per il sistema di plugin. – ZoFreX