2014-04-17 6 views
20

Ho un'applicazione Tomcat che deve fare riferimento ad alcuni file di proprietà esterni all'app. Generalmente questi sono memorizzati su una macchina locale in un luogo specifico come C:\PROJECT_NAME\conf\.Aggiunta di risorse esterne al percorso classe in Tomcat 8

In Tomcat 7 questo era ottenibile inserendo un file context.xml interno /META-INF/ che ha usato un VirtualWebappLoader per aggiungere sostanzialmente questa posizione al classpath applicazione come segue:

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

Come posso ottenere la stessa cosa in Tomcat 8?

risposta

29

C'è una sezione su questo nel Tomcat 8 migration guide che dirigerà l'utilizzo di un resources configuration

In particolare, vi sarà la creazione di un oggetto WebResourceRoot che contiene il seguente testo nella sua descrizione.

VirtualWebappLoader - Sostituito da pre e post-Risorse mappato al WEB-INF/lib e classi WEB-INF/

Il nuovo context.xml avrà un aspetto simile al seguente:

<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

stavo aggiungendo in una directory esterna di 'file jar' che non volevo essere nei webapps LIB driectory. Ho dovuto usare 'webAppMount ="/WEB-INF/lib "' per farlo funzionare. Inoltre puoi usare variabili nell'xml come '$ {catalina.base}'. –

+0

Ciao, Michael, sono stato collegato qui, perché il mio post https://stackoverflow.com/q/47817600/1224441 è stato chiuso a causa di duplicati. Ma non riesco a capire come risolvere il mio problema con la tua risposta e i link che hai dato. Potresti illuminarmi se hai un po 'di tempo? Grazie. –

1

Solo un altro esempio:

Si prega di notare i commenti dentro e notare che ho usato PostResources e non PreResources così che posso scavalcare le classi nel mio attuale progetto se non sono soddisfatto della mia implementazione "util". In realtà non sono sicuro che se JarResource venga trattato come "PostResource" o "PreResource" ma funzioni di contenuto e classi statici di override.

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