Ajout d’un répertoire au classcat de tomcat

J’ai un dossier dans mon lecteur C:\app_config\java_app Ce dossier contient des fichiers de propriétés spécifiques aux parameters régionaux.

J’ai une classe java ( PrjPropertilesLocator ) qui charge les fichiers de propriétés en fonction des parameters régionaux par défaut au démarrage de l’application Web. Mon application Web s’exécute dans Tomcat. Le problème est de savoir comment définir ce répertoire C:\app_config\java_app dans le classpath de tomcat afin que celui-ci soit disponible pour le ResourceBundle dans la classe PrjPropertilesLocator . Est-il possible de définir ce dossier spécifiquement pour une application Web unique qui en a besoin.Je ne souhaite pas mettre les fichiers de propriétés dans le dossier WEB-INF/classes .

Sur weblogic, cela fonctionne très bien. J’ai défini le répertoire dans le classpath de weblogic dans l’un de ses scripts de démarrage et cela fonctionne correctement. Mais sur Tomcat, j’ai essayé de le mettre dans startup.bat également dans setclasspath.bat , mais je n’ai pas réussi à le faire.

shared.loader -le common.loader propriété shared.loader ou common.loader de /conf/catalina.properties .

Voir aussi question: Puis-je créer un classpath personnalisé par application dans Tomcat

Tomcat 7 Context hold Elément du chargeur . Selon le descripteur de déploiement de docs (quoi dans la ) peut être placé dans:

  • $CATALINA_BASE/conf/server.xml – bad – nécessite le redémarrage du serveur pour relire la configuration
  • $CATALINA_BASE/conf/context.xml – mauvais – partagé entre toutes les applications
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml – mauvais – nécessite un reconditionnement pour modifier la configuration
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xmlsympa , mais voyez la dernière option !!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xmlsympa , mais voyez la dernière option !!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml – le meilleur – complètement hors application et automatiquement analysé pour les modifications !!!

Voici ma configuration qui montre comment utiliser la version de développement des fichiers de projet dans la hiérarchie $CATALINA_BASE (notez que je place ce fichier dans src/test/resources dir et insortinggue Maven pour prétraiter ${basedir} placeholders via pom.xml true donc après la construction dans un nouvel environnement, je le copie dans $CATALINA_BASE/conf/Catalina/localhost/$APP.xml ):

           

UPDATE Tomcat 8 modifie la syntaxe des éléments et , la partie correspondante ressemblant maintenant à:

     

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

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

alors dans catalina.bat, il est utilisé comme ça

 %_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 pas d’autres vars qui sont inclus, donc je pense que vous êtes bloqué avec l’édition de setclasspath.bat et la modification de la manière dont CLASSPATH est construit. Pour Tomcat 6.0.20, cette modification était similaire à 74 de setclasspath.bat

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

Ce que je vous suggère est d’append un META-INF avec un fichier MANIFEST.MF dans le fichier .war.

Veuillez noter que, conformément à la spécification de servlet, ce doit être un fichier .war et non un répertoire .war pour que le fichier META-INF/MANIFEST.MF soit lu par le conteneur.

Modifiez la propriété MANIFEST.MF Class-Path à C:\app_config\java_app :

Voir Utilisation des fichiers JAR: notions de base (compréhension du manifeste)

Prendre plaisir.

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

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