2012-12-04 18 views
5

mio scenario è il seguente:carico libreria esterna in applicazioni Web Java

Ho un WebApp.war che viene distribuito a un servlet container. Questo WebApp.war contiene in WEB-INF/lib le seguenti librerie:

  • lib_a.jar
  • lib_b.jar

ho un altra libreria, diciamo lib_vendor.jar, che non posso distribuire all'interno di WebApp/WEB-INF/lib a causa di problemi di licenza, quindi permetto ai nostri clienti di copiare questa libreria in tomcat/lib dopo l'installazione dell'applicazione. Ma dal momento che lib_vendor.jar richiede lib_a.jar e lib_b.jar che sono caricati nel caricatore di classi di applicazioni web, non posso usare lib_vendor.jar.

Come caricare una libreria esterna (non in WEB-INF/lib) nello stesso classloader di un'applicazione Web?

+0

"a causa di problemi di licenza" provare a risolvere i problemi di licenza ... – NimChimpsky

+0

non è sicuro, ma è possibile aggiungere la libreria in classpath. Non è necessario aggiungerlo nella directory 'lib'. –

+0

NimChimpsky, non è possibile risolvere i problemi di licenza –

risposta

6

Poiché si utilizza Tomcat, è possibile utilizzare lo VirtualWebappLoader.

Aggiungi un META-INF/context.xml whith

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/somepath/myapp"> 
    <Loader className="org.apache.catalina.loader.VirtualWebappLoader" 
       virtualClasspath="/somedir/*.jar"/> 
</Context> 

Ricordate anche che l'attributo virtualClasspath deve essere un percorso assoluto, come correttamente affermato nel commento qui sotto.

+1

Solo per confermare che questa è una risposta veramente corretta, come [detto qui] (http://tomcat.10.x6.nabble.com/how-to-use-VirtualWebappLoader -either-in-META-INF-context-xml-or-programmatically-on-startup-tp2017324p2017326.html), deve essere una directory assoluta. Relativo come questo non funziona. – lucasvc

+1

@datakey Grazie, modificato. –

Problemi correlati