2014-04-17 7 views
20

Ich habe eine Tomcat-Anwendung, die auf einige Eigenschaftendateien verweisen muss, die sich außerhalb der App befinden. Im Allgemeinen werden diese auf einer lokalen Maschine an einem bestimmten Ort wie C:\PROJECT_NAME\conf\ gespeichert.Hinzufügen von externen Ressourcen zum Klassenpfad in Tomcat 8

In Tomcat 7 war dies erreichbar durch eine context.xml Datei innerhalb von /META-INF/ platzieren, die ein VirtualWebappLoader verwendet, um im Wesentlichen um diesen Ort zu der Classpath Anwendung hinzufügen wie folgt:

<Context> 
    <Loader className="org.apache.catalina.loader.VirtaulWebappLoader" 
     virtualClasspath="/PROJECT_NAME/conf" 
     searchVirtualFirst="true" /> 
</Context> 

Wie erreiche ich diese gleiche Sache in Tomcat 8?

Antwort

29

Es gibt einen Abschnitt darüber im Tomcat 8 migration guide, die Ihnen eine resources configuration

Insbesondere verwenden lenken, werden Sie ein WebResourceRoot Objekt erschaffen, die den folgenden Text in der Beschreibung enthält.

VirtualWebappLoader - Ersetzt durch Pre- und Post-Ressourcen zu WEB-INF abgebildet/lib und WEB-INF/classes

Ihr neues context.xml wird etwa wie folgt aussehen:

<Context> 
    <Resources className="org.apache.catalina.webresources.StandardRoot"> 
     <PreResources className="org.apache.catalina.webresources.DirResourceSet" 
      base="C:\\PROJECT_NAME\\conf" 
      internalPath="/" 
      webAppMount="/WEB-INF/classes" /> 
    </Resources> 
</Context> 
+2

Ich habe in einem externen Verzeichnis von 'jar' Dateien hinzugefügt, die ich nicht in der Webapps Lib-Driectory sein wollte. Ich musste 'webAppMount ="/WEB-INF/lib "' verwenden, um es zum Laufen zu bringen. Sie können auch Variablen in der XML-Datei wie '$ {catalina.base}' verwenden. –

+0

Hallo, Michael, ich wurde hier verlinkt, weil mein Beitrag https://stackoverflow.com/q/47817600/1224441 wegen Duplikaten geschlossen wurde. Aber ich kann nicht herausfinden, wie ich mein Problem mit Ihrer Antwort und den von Ihnen angegebenen Links lösen kann. Könntest du mich aufklären, wenn du etwas Zeit hast? Vielen Dank. –

1

Nur ein weiteres Beispiel:

Bitte beachten Sie die Kommentare in und beachten Sie, dass ich PostResources verwendet und nicht PreResources so dass ich Klassen in meinem aktuellen Projekt überschreiben kann, wenn ich nicht mit meiner "util" -Implementierung zufrieden bin. Ich bin mir nicht sicher, ob JarResource als "PostResource" oder "PreResource" behandelt wird, aber das Überschreiben von statischen Inhalten und Klassen funktioniert.

<!-- 
     https://tomcat.apache.org/tomcat-8.0-doc/config/resources.html 
     http://stackoverflow.com/questions/23143697/adding-external-resources-to-class-path-in-tomcat-8 
     http://stackoverflow.com/questions/34515852/tomcat-7-application-migration-to-tomcat-8 
     http://mikusa.blogspot.co.za/2014/07/tips-on-migrating-to-tomat-8-resources.html 
    --> 
    <Context path="/MY_PROJECT" docBase="/MY_PROJECT"> 
     <Resources className="org.apache.catalina.webresources.StandardRoot"> 
      <!-- Post-load the static content from my util project --> 
      <PostResources className="org.apache.catalina.webresources.DirResourceSet" 
        base="/workspace/MY_UTIL_PROJECT/WebContent" 
        webAppMount="/"> 
      </PostResources> 
      <!-- Post-load the classes from my util project --> 
      <PostResources className="org.apache.catalina.webresources.DirResourceSet" 
        base="/workspace/MY_UTIL_PROJECT/WebContent/WEB-INF/classes" 
        webAppMount="/WEB-INF/classes"> 
      </PostResources> 
      <!-- Load the JARs contained within my util project --> 
      <JarResources className="org.apache.catalina.webresources.DirResourceSet" 
        base="/workspace/MY_UTIL_PROJECT/WebContent/WEB-INF/lib" 
        webAppMount="/WEB-INF/lib"> 
      </JarResources> 
     </Resources> 
    </Context>