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.
5 réponses
il suffit de le préciser dans shared.loader
ou common.loader
propriété de /conf/catalina.properties
.
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>
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
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.
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