Ajouter un répertoire à classpath tomcat

j'ai un dossier dans mon lecteur C: comme C:app_configjava_app Ce dossier contient des fichiers de propriétés spécifiques à la localisation.

j'ai une classe java ( PrjPropertilesLocator ) qui charge les fichiers de propriétés basés sur la locale par défaut au démarrage de l'application web.Mon application web tourne à l'intérieur de tomcat. Le problème est de savoir comment définir ce répertoire C:app_configjava_app dans la classepath tomcat afin qu'il devienne disponible pour la commande ResourceBundle dans la classe PrjPropertilesLocator . Est-il un moyen je peux configurer ce dossier spécifiquement pour une application Web unique qui en a besoin.Je ne veux pas mettre les fichiers de propriétés dans le dossier WEB-INF/classes .

sur weblogic ça marche très bien.J'ai placé le répertoire à l'intérieur de classpath weblogic dans l'un de ses scripts de démarrage et il fonctionne très bien. Mais sur Tomcat j'ai essayé de le mettre dans startup.bat aussi dans setclasspath.bat , mais n'a pas été en mesure de le faire avec succès.

64
demandé sur rjdkolb 2009-08-19 19:36:17

5 réponses

il suffit de le préciser dans shared.loader ou common.loader propriété de /conf/catalina.properties .

118
répondu BalusC 2009-12-07 23:32:52

Voir également la question: puis-je créer un classpath application par application Tomcat

Tomcat 7 Contexte hold Loader élément. Selon docs descripteur de déploiement (que dans <Context> étiquette) peut être placé dans:

  • $CATALINA_BASE/conf/server.xml - bad-require server redémarre pour relire la config
  • $CATALINA_BASE/conf/context.xml - mauvais - partagé entre toutes les applications
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml - mauvais - besoin de reconditionnement pour changer de config
  • $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 scanné pour les changements!!!

voici ma config qui montre comment utiliser la version de développement des fichiers de projet à partir de la hiérarchie $CATALINA_BASE (notez que je place ce fichier dans src/test/resources dir et intruct Maven pour préprocesser ${basedir} placeholders par pom.xml <filtering>true</filtering> donc après la construction dans un nouvel environnement je le copie à $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>

mise à JOUR Tomcat 8 changement syntaxe pour <Resources> et <Loader> éléments, partie correspondante ressemblent 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>
26
répondu gavenkoa 2017-05-23 10:31:02

dans Tomcat 6, le chemin de classe dans votre environnement est ignoré. In setclasspath.chauve-souris, vous verrez

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

puis à catalina.bat, il est utilisé comme

%_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 coincé avec l'édition setclasspath.bat et changer la façon dont CLASSPATH est construit. Pour Tomcat 6.0.20, ce changement était sur comme 74 de setclasspath.MTD

set CLASSPATH=C:\app_config\java_app;%JAVA_HOME%\lib\tools.jar
13
répondu Trenton 2009-08-19 17:31:16

ce que je vous suggère de faire est d'ajouter un répertoire META-INF avec un fichier MANIFEST.MF .la guerre de fichier.

veuillez noter que selon la spécification du servlet, il doit s'agir d'un .la guerre de fichier et pas .la guerre répertoire pour le META-INF/MANIFEST.MF pour être lu par conteneur.

modifier la propriété MANIFEST.MF Class-Path pour C:\app_config\java_app :

voir utiliser les fichiers JAR: les bases (comprendre le Manifeste)

de Profiter de.

5
répondu Koekiebox 2015-07-17 04:13:33

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

export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR
2
répondu Sudhir N 2016-03-16 18:11:29