添加一个目录到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.loader
或common.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