webentwicklung-frage-antwort-db.com.de

Hinzufügen eines Verzeichnisses zum Tomcat-Klassenpfad

Ich habe einen Ordner in meinem Laufwerk C: als C:\app_config\Java_app Dieser Ordner enthält einige länderspezifische Eigenschaftendateien.

Ich habe eine Java class (PrjPropertilesLocator), die die Eigenschaftendateien basierend auf dem Standardgebietsschema beim Start der Webanwendung lädt. Meine Webanwendung wird in Tomcat ausgeführt. Das Problem ist Wie soll ich dieses Verzeichnis C:\app_config\Java_app im Tomcat-Klassenpfad festlegen, damit es dem ResourceBundle in der Klasse PrjPropertilesLocator zur Verfügung steht? Gibt es eine Möglichkeit, diesen Ordner speziell für eine einzelne Webanwendung festzulegen? Ich möchte die Eigenschaftendateien nicht im Ordner WEB-INF/classes ablegen.

Auf Weblogic läuft dies einwandfrei. Ich habe das Verzeichnis innerhalb des Weblogic-Klassenpfads in einem seiner Startskripte festgelegt und es funktioniert einwandfrei. Aber auf Tomcat habe ich versucht, es in startup.bat Auch in setclasspath.bat Einzufügen, konnte es aber nicht erfolgreich.

67
Rajat

Geben Sie es einfach in der Eigenschaft shared.loader Oder common.loader Von /conf/catalina.properties An.

122
BalusC

Siehe auch Frage: Kann ich in Tomcat einen benutzerdefinierten Klassenpfad pro Anwendung erstellen?

Tomcat 7 Kontext gedrückt halten Loader Element. Laut docs Deployment-Deskriptor (was in <Context> Tag) kann platziert werden in:

  • $CATALINA_BASE/conf/server.xml - schlecht - Server muss neu gestartet werden, um die Konfiguration erneut zu lesen
  • $CATALINA_BASE/conf/context.xml - schlecht - für alle Anwendungen freigegeben
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml - schlecht - muss neu gepackt werden, um die Konfiguration zu ändern
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml - Nice, aber siehe letzte Option !!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xml - Nice, aber siehe letzte Option !!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml - am besten - komplett außer Kraft gesetzt und automatisch nach Änderungen durchsucht !!!

Hier meine Konfiguration, die demonstriert, wie man Entwicklungsversionen von Projektdateien aus der $CATALINA_BASE - Hierarchie verwendet (beachte, dass ich diese Datei in das src/test/resources - Verzeichnis lege und Maven anweise, Platzhalter ${basedir} Vorzuverarbeiten pom.xml<filtering>true</filtering> Also kopiere ich es nach dem Erstellen einer neuen Umgebung nach $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>

[~ # ~] Update [~ # ~] Tomcat 8-Syntax ändern für<Resources> und <Loader> Elemente sehen nun wie folgt aus:

<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>
27
gavenkoa

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

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

dann wird es in catalina.bat so verwendet

%_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%

Ich sehe keine anderen Vars, die enthalten sind. Ich glaube, Sie müssen setclasspath.bat bearbeiten und die Art und Weise ändern, in der CLASSPATH erstellt wird. Für Tomcat 6.0.20 war diese Änderung auf wie 74 von setclasspath.bat

set CLASSPATH=C:\app_config\Java_app;%Java_HOME%\lib\tools.jar
13
Trenton

Ich schlage vor, dass Sie ein META-INF - Verzeichnis mit einer MANIFEST.MF - Datei in der WAR-Datei hinzufügen.

Bitte beachten Sie, dass es sich laut Servlet-Spezifikation um eine WAR-Datei und nicht um ein WAR-Verzeichnis handeln muss, damit der META-INF/MANIFEST.MF Vom Container gelesen werden kann.

Bearbeiten Sie die Klassenpfadeigenschaft MANIFEST.MF Zu C:\app_config\Java_app:

Siehe Verwenden von JAR-Dateien: Die Grundlagen (Das Manifest verstehen)

Genießen.

5
Koekiebox

Sie können eine neue Datei setenv.sh (oder setenv.bat) im Verzeichnis tomcats bin erstellen und dort die folgende Zeile hinzufügen

export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR
2
Sudhir N