2009-08-19 46 views
60

Tengo una carpeta en mi C: unidad como C:\app_config\java_app Esta carpeta contiene algunos archivos de propiedades específicos de la configuración regional.Agregar un directorio a tomcat classpath

Tengo una clase de Java (PrjPropertilesLocator) que carga los archivos de propiedades según la configuración regional predeterminada en el inicio de la aplicación web. Mi aplicación web se ejecuta dentro de tomcat. El problema es cómo debería establecer este directorio C:\app_config\java_app en la ruta de clase tomcat para que esté disponible para ResourceBundle dentro de la clase PrjPropertilesLocator. ¿Hay alguna manera de configurar esta carpeta específicamente para una aplicación web única que la necesite? No quiero poner los archivos de propiedades dentro de la carpeta WEB-INF/classes.

En weblogic, esto funciona bien. Establecí el directorio dentro de la ruta de clase weblogic en uno de sus scripts de inicio y funciona bien. Pero en Tomcat intenté ponerlo en startup.bat también en setclasspath.bat, pero no pude hacerlo con éxito.

+1

Basta con leer en este enlace http: //www.chemaxon .com/jchem/doc/admin/tomcat.html, que tomcat no utiliza el classpath del sistema. Copié todos los archivos de C:/app_config/java_app a la carpeta /lib y funcionó. Parece que tomcat no usa el sistema classpath.Podemos establecer la carpeta C: \ app_config \ java_app dentro de uno de los archivos de inicio de tomcat. – Rajat

+2

http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html – jack

Respuesta

109

Solo especifíquelo en shared.loader o common.loader propiedad de /conf/catalina.properties.

+9

Me pregunto si hay una manera de especificar cualquiera de estos usando parámetros de línea de comandos. Sería muy útil ya que no tendría que modificar ningún archivo Tomcat para que esto funcione ... –

+4

Pasé horas buscando esta solución. Una vez más BalusC ha llegado. – Rhys

+1

La gente podría estar interesada en [Comprender la ruta de clases de Tomcat - Problemas comunes y cómo solucionarlos] (https://www.mulesoft.com/tcat/tomcat-classpath) como un gran artículo relevante. – DuffJ

12

En Tomcat 6, se ignora la CLASSPATH en su entorno. En setclasspath.bat verá

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

después en catalina.bat, se utiliza como tal

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

no veo ningún otro VARs que se incluyen, por lo que piensa que está atascado con la edición de setclasspath.bat y cambiando cómo se construye CLASSPATH. Para Tomcat 6.0.20, este cambio fue el 74 de setclasspath.bat como

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

Lo que yo sugiero que hacer es añadir un directorio con un archivo META-INFMANIFEST.MF en el archivo .war.

Tenga en cuenta que, de acuerdo con las especificaciones del servlet, debe ser un archivo .war y no .war para que el META-INF/MANIFEST.MF se lea por contenedor.

Editar la propiedad MANIFEST.MF Class-Path a C:\app_config\java_app:

Ver Using JAR Files: The Basics (Understanding the Manifest)

disfrutar.

+0

Bueno, no funciona para mí. Tenga en cuenta las fuentes puestas: es posible que deba hacer referencia a clases en otros archivos JAR desde dentro de un archivo JAR. La forma en que funciona para 'jar', pero no para mi aplicación web. – FaithReaper

20

Ver también la pregunta: Can I create a custom classpath on a per application basis in Tomcat

Tomcat 7 Context sostienen Loader elemento. De acuerdo con docs descriptor de despliegue (lo que en <Context> etiqueta) se puede colocar en:

  • $CATALINA_BASE/conf/server.xml - mal - requerir reinicia el servidor con el fin de volver a leer config
  • $CATALINA_BASE/conf/context.xml - mal - compartida a través de todas las aplicaciones
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml - malo - requiere reempaquetado para cambiar la configuración
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml - nice, pero vea la última opción !!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xml - nice, pero vea la última opción !!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml - mejor - completamente fuera de aplicación y escaneado automáticamente en busca de cambios !!!

Aquí mi configuración que demuestran cómo utilizar versión de desarrollo de los archivos de proyecto de $CATALINA_BASE jerarquía (tenga en cuenta que coloco este archivo en src/test/resources dir y intruct Maven preprocesasen ${basedir} marcadores de posición a través pom.xml<filtering>true</filtering> así que después de construir en el nuevo entorno me copiarlo en $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> 

ACTUALIZACIÓNTomcat 8 change syntax for<Resources> y <Loader> elementos, correspondiente parte ahora el siguiente aspecto:

<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> 
1

Se puede crear un nuevo archivo, setenv.sh (o setenv.bat) dentro del directorio bin gatos machos y añada la línea siguiente existe

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