web-dev-qa-db-fra.com

Ajout d'un répertoire au chemin de classe Tomcat

J'ai un dossier dans mon lecteur C: en tant que C:\app_config\Java_app. Ce dossier contient des fichiers de propriétés spécifiques à l'environnement local.

J'ai une classe Java (PrjPropertilesLocator) qui charge les fichiers de propriétés en fonction des paramètres régionaux par défaut au démarrage de l'application Web. L'application Web s'exécute dans Tomcat. Le problème est Comment dois-je définir ce répertoire C:\app_config\Java_app dans le chemin de classe Tomcat afin que le ResourceBundle de la classe PrjPropertilesLocator puisse le consulter? Y at-il un moyen de définir ce dossier spécifiquement pour une seule Je ne veux pas placer les fichiers de propriétés dans le dossier WEB-INF/classes.

Cela fonctionne très bien sur weblogic.J'ai placé le répertoire à l'intérieur du chemin de classe weblogic dans l'un de ses scripts de démarrage et cela fonctionne bien. Mais sur Tomcat, j'ai essayé de le mettre dans startup.bat Ainsi que dans setclasspath.bat, Mais je n'ai pas réussi à le faire.

67
Rajat

Spécifiez-le simplement dans shared.loader ou common.loader propriété de /conf/catalina.properties.

122
BalusC

Voir aussi question: Puis-je créer un chemin de classe personnalisé pour chaque application dans Tomcat

Tomcat 7 contexte maintenir chargeur élément. Selon docs descripteur de déploiement (que contient <Context> tag) peut être placé dans:

  • $CATALINA_BASE/conf/server.xml - mauvais - nécessite le redémarrage du serveur pour relire config
  • $CATALINA_BASE/conf/context.xml - bad - partagé entre toutes les applications
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml - mauvais - nécessite un reconditionnement pour changer de configuration
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml - Nice, mais voir la dernière option !!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xml - Nice, mais voir la dernière option !!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml - meilleur - complètement hors d’application et automatiquement analysé pour vérifier si des modifications ont été effectuées !!!

Voici ma configuration qui montre comment utiliser la version de développement des fichiers de projet sur $CATALINA_BASE hiérarchie (notez que je place ce fichier dans src/test/resources dir et intro Maven pour le prétraitement ${basedir} espaces réservés via pom.xml<filtering>true</filtering> donc après avoir intégré le nouvel environnement, je le copie dans $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>

[~ # ~] mettre à jour [~ # ~] la syntaxe de Tomcat 8 change pour<Resources> et <Loader> éléments, la partie correspondante ressemble maintenant à:

<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

Dans Tomcat 6, le CLASSPATH de votre environnement est ignoré. Dans setclasspath.bat, vous verrez

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

puis dans catalina.bat, il est utilisé comme si

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

Je ne vois aucun autre vars inclus. Je pense donc que vous êtes obligé de modifier setclasspath.bat et de modifier la structure de CLASSPATH. Pour Tomcat 6.0.20, ce changement était sur comme 74 de setclasspath.bat

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

Ce que je vous suggère de faire est d'ajouter un META-INF répertoire avec un MANIFEST.MF fichier dans le fichier .war.

Veuillez noter que, selon la spécification de servlet, il doit s'agir d'un fichier .war et non d'un répertoire .war pour le fichier META-INF/MANIFEST.MF à lire par conteneur.

Editez le MANIFEST.MF Propriété Class-Path à C:\app_config\Java_app:

Voir tilisation de fichiers JAR: notions de base (Comprendre le manifeste)

Prendre plaisir.

5
Koekiebox

Vous pouvez créer un nouveau fichier, setenv.sh (ou setenv.bat) dans le répertoire tomcats bin et y ajouter la ligne suivante.

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