添加一个目录到tomcat classpath

我在C:驱动器中有一个文件夹作为C:\app_config\java_app此文件夹包含一些特定于语言环境的属性文件。

我有一个Java类( PrjPropertilesLocator ),加载属性文件的基础上启动Web App的默认区域设置。我的web应用程序运行在tomcat内部。 问题是我应该如何设置这个目录C:\app_config\java_app在tomcat类path中,以便PrjPropertilesLocator类中的ResourceBundle可用。 有没有办法,我可以设置此文件夹专门为一个单一的Web应用程序需要它。我不想把属性文件内的WEB-INF/classes文件夹。

在weblogic上运行fine.I在其启动脚本之一中设置weblogic classpath中的目录,并且工作正常。 但是在Tomcat上,我尝试将它放在startup.bat中的startup.bat中,但是无法成功执行。

只需在shared.loadercommon.loader属性中指定它/conf/catalina.properties

另请参见问题: 我可以在Tomcat中为每个应用程序创build一个自定义类path

Tomcat 7 上下文保存Loader元素。 根据文档部署描述符( <Context>标签中)可以放置在:

  • $CATALINA_BASE/conf/server.xml – 坏 – 要求服务器重新启动,以重新configuration
  • $CATALINA_BASE/conf/context.xml – bad – 在所有应用程序中共享
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml – 坏 – 需要重新打包才能更改configuration
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml不错 ,但看到最后一个选项!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xml很好 ,但看到最后的select!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml最好 – 完全不在应用程序中,并自动扫描更改!

在这里,我的configuration演示了如何使用$CATALINA_BASE层次结构中的项目文件的开发版本(注意,我把这个文件放在src/test/resources目录下,并构buildMaven来通过pom.xml预处理${basedir}占位符<filtering>true</filtering>所以在build立新的环境之后,我将它复制到$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> 

更新 Tomcat 8更改 <Resources><Loader>元素的语法 ,相应的部分现在看起来像:

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

在Tomcat 6中,环境中的CLASSPATH将被忽略。 在setclasspath.bat中,你会看到

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

那么在catalina.bat中,就是这样使用的

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

我没有看到包含的其他variables,所以我认为你一直在编辑setclasspath.bat,并改变CLASSPATH的构build方式。 对于Tomcat 6.0.20,这个改变就像setclasspath.bat的74一样

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

我build议你做的是在.war文件中添加一个MANIFEST.MF文件的META-INF目录。

请注意,根据servlet规范,它必须是.war文件,而不是.war目录, META-INF/MANIFEST.MF将被容器读取。

编辑MANIFEST.MF类path属性到C:\app_config\java_app

请参阅使用JAR文件:基本知识(了解清单)

请享用。

您可以在tomcats bin目录内创build一个新文件setenv.sh(或setenv.bat),并在其中添加以下行

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