2012-12-04 16 views
5

Mein Szenario ist das folgende:Load externe Bibliothek in Java-Webanwendung

Ich habe eine WebApp.war, die in einem Servlet-Container bereitgestellt wird. Diese WebApp.war enthält in WEB-INF/lib die folgenden Bibliotheken:

  • lib_a.jar
  • lib_b.jar

ich eine andere Bibliothek haben, sagen lib_vendor.jar, dass ich nicht kann Bereitstellung in WebApp/WEB-INF/lib aufgrund von Lizenzproblemen, so dass meine Kunden diese Bibliothek nach der Installation der Anwendung in tomcat/lib kopieren können. Aber da lib_vendor.jar lib_a.jar und lib_b.jar benötigt, die im Klassenladeprogramm für Webanwendungen geladen werden, kann ich lib_vendor.jar nicht verwenden.

Wie kann ich eine externe Bibliothek (nicht im WEB-INF/lib) in dem gleichen Klassenlader einer Web-Anwendung geladen werden?

+0

„wegen Lizenzproblemen“ versuchen, die Probleme zu lösen Lizenzierung ... – NimChimpsky

+0

nicht sicher, aber man kann die Bibliothek in Classpath hinzufügen. Nicht notwendig, um es in 'lib'-Verzeichnis hinzuzufügen. –

+0

NimChimpsky, dann ist es nicht möglich, dass Lizenz-Probleme zu lösen –

Antwort

6

Da Sie Tomcat verwenden, könnten Sie die VirtualWebappLoader nutzen.

ein 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> 

hinzufügen Denken Sie auch daran, dass das virtualClasspath Attribut einen absoluten Pfad sein muss, wie es unten richtig im Kommentar angegeben.

+1

nur um zu bestätigen, dass dies eine wirklich richtige Antwort, wie [hier gesagt] (http://tomcat.10.x6.nabble.com/how-to-use-VirtualWebappLoader -either-in-META-INF-Kontext-xml-oder-programmatically-on-startup-tp2017324p2017326.html), es muss ein absolutes Verzeichnis sein. Relativ funktioniert das nicht. – lucasvc

+1

@datakey Danke, bearbeitet. –

Verwandte Themen