2009-08-19 3 views
60

Ich habe einen Ordner in meinem Laufwerk C: Dieser Ordner enthält einige länderspezifische Eigenschaftendateien.Hinzufügen eines Verzeichnisses zu Tomcat Classpath

Ich habe eine Java-Klasse (PrjPropertilesLocator), die die Eigenschaft Dateien basierend auf dem Standardgebietsschema beim Start des Web App geladen. Meine Webanwendung läuft in Tomcat. Das Problem ist, wie sollte ich dieses Verzeichnis im Tomcat Classpath festlegen, so dass dies für das ResourceBundle innerhalb der PrjPropertilesLocator Klasse verfügbar wird. Gibt es eine Möglichkeit, diesen Ordner speziell für eine einzelne Web-App, die es benötigt, festlegen. Ich möchte nicht die Eigenschaft Dateien in WEB-INF/classes Ordner.

Auf Weblogic läuft das gut.Ich setze das Verzeichnis in den Weblogic Klassenpfad in einem seiner Startup-Skripte und es funktioniert gut. Aber auf Tomcat habe ich versucht, es in startup.bat auch in setclasspath.bat setzen, war aber nicht in der Lage, dies erfolgreich zu tun.

+1

Lesen Sie einfach auf diesen Link http: //www.chemaxon Tomcat verwendet nicht den Systemklassenpfad. Ich habe alle Dateien von C:/app_config/java_app in den Ordner /lib kopiert und es funktionierte. Es sieht so aus, als ob der Tomcat das System nicht benutzt classpath.Can setzen wir den Ordner C: \ app_config \ java_app in eine der tomcats Startup-Dateien. – Rajat

+2

http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html – jack

Antwort

109

Einfach in shared.loader oder common.loader Eigenschaft von /conf/catalina.properties angeben.

+9

Ich frage mich, ob es eine Möglichkeit gibt, eines davon mit Kommandozeilenparametern anzugeben. Es wäre sehr praktisch, da ich keine Tomcat-Dateien ändern müsste, damit das funktioniert ... –

+4

Ich habe stundenlang nach dieser Lösung gesucht. Wiederum ist BalusC durchgekommen. – Rhys

+1

Leute könnten interessiert sein an [Understanding The Tomcat Classpath - Allgemeine Probleme und wie man sie beheben kann] (https://www.mulesoft.com/tcat/tomcat-classpath) als ein großer relevanter Artikel. – DuffJ

12

In Tomcat 6 wird der CLASSPATH in Ihrer Umgebung ignoriert. In setclasspath.bat sehen Sie

set CLASSPATH=%JAVA_HOME%\lib\tools.jar 

dann in catalina.bat, es ist wie so

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% 
-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" 
-Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" 
-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% 

verwendet wird kann ich keine anderen Vars sehen, die enthalten sind, so dass ich glaube, du bist fest mit der Bearbeitung von setclasspath.bat und ändern, wie CLASSPATH gebaut wird. Für Tomcat 6.0.20, war diese Veränderung auf wie 74 von setclasspath.bat

set CLASSPATH=C:\app_config\java_app;%JAVA_HOME%\lib\tools.jar 
4

Was ich schlage vor, Sie tun, ist ein META-INF Verzeichnis mit einer MANIFEST.MF Datei in WAR-Datei hinzufügen.

Bitte beachten Sie, dass laut Servlet-Spezifikation eine .war-Datei und kein .war-Verzeichnis für den META-INF/MANIFEST.MF Container gelesen werden muss.

Bearbeiten der MANIFEST.MF Class-Path-Eigenschaft auf C:\app_config\java_app:

Siehe Using JAR Files: The Basics (Understanding the Manifest)

Genießen.

+0

Nun, es funktioniert nicht für mich. Notieren Sie sich die Quellen: Möglicherweise müssen Sie Klassen in anderen JAR-Dateien in einer JAR-Datei referenzieren. Der Weg mag für "jar" funktionieren, aber nicht für meine Webanwendung. – FaithReaper

20

Siehe auch Frage: Can I create a custom classpath on a per application basis in Tomcat

Tomcat 7 Context halten Loader Element. schlecht - - erfordern Server neu gestartet wird, um noch einmal zu lesen Config

  • $CATALINA_BASE/conf/context.xml -

    • $CATALINA_BASE/conf/server.xml schlecht - für alle Anwendungen
    • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml geteilt -: Nach docs Deployment Descriptor (was in <Context>-Tag) kann in platziert werden schlecht - erfordert Umpacken, um die Konfiguration zu ändern
    • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml - schön, aber siehe letzte Option !!
    • $CATALINA_BASE/webapps/$APP/META-INF/context.xml - nett, aber siehe letzte Option !!
    • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml - beste - vollständig aus der Anwendung und automatisch für Änderungen gescannt !!!

    Hier meine Config, die zeigen, wie die Entwicklung Version von Projektdateien aus $CATALINA_BASE Hierarchie verwenden (beachten Sie, dass ich diese Datei in src/test/resources dir platzieren und intruct Maven vorverarbeitet ${basedir} Platzhalter durch pom.xml<filtering>true</filtering> so nach in neuer Umgebung bauen I kopieren sie sie in $CATALINA_BASE/conf/Catalina/localhost/$APP.xml):

    <Context docBase="${basedir}/src/main/webapp" 
         reloadable="true"> 
        <!-- http://tomcat.apache.org/tomcat-7.0-doc/config/context.html --> 
        <Resources className="org.apache.naming.resources.VirtualDirContext" 
           extraResourcePaths="/WEB-INF/classes=${basedir}/target/classes,/WEB-INF/lib=${basedir}/target/${project.build.finalName}/WEB-INF/lib"/> 
        <Loader className="org.apache.catalina.loader.VirtualWebappLoader" 
          virtualClasspath="${basedir}/target/classes;${basedir}/target/${project.build.finalName}/WEB-INF/lib"/> 
        <JarScanner scanAllDirectories="true"/> 
    
        <!-- Use development version of JS/CSS files. --> 
        <Parameter name="min" value="dev"/> 
        <Environment name="app.devel.ldap" value="USER" type="java.lang.String" override="true"/> 
        <Environment name="app.devel.permitAll" value="true" type="java.lang.String" override="true"/> 
    </Context> 
    

    UPDATETomcat 8 change syntax for<Resources> und <Loader> Elemente, Teil entspricht jetzt aussehen:

    <Resources> 
        <PostResources className="org.apache.catalina.webresources.DirResourceSet" 
            webAppMount="/WEB-INF/classes" base="${basedir}/target/classes" /> 
        <PostResources className="org.apache.catalina.webresources.DirResourceSet" 
            webAppMount="/WEB-INF/lib" base="${basedir}/target/${project.build.finalName}/WEB-INF/lib" /> 
    </Resources> 
    
  • 1

    Sie können eine neue Datei, setenv.sh (oder setenv.bat) innerhalb tomcats bin-Verzeichnis erstellen und fügen Sie dort folgende Zeile

    export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR