将目录添加到tomcat classpath

我的C:驱动器中有一个文件夹,名称为C:app_configjava_app此文件夹包含一些特定于语言环境的属性文件。

我有一个Java类( PrjPropertilesLocator ),它基于Web App启动时的默认语言环境加载属性文件。我的Web应用程序在tomcat中运行。 问题是我应该如何在tomcat类路径中设置这个目录C:app_configjava_app ,以便PrjPropertilesLocator类中的ResourceBundle可用。 有没有一种方法可以为需要它的单个Web应用程序专门设置此文件夹。我不想将属性文件放在WEB-INF/classes文件夹中。

在weblogic上,它运行的很好。我在其启动脚本之一中设置了weblogic classpath中的目录,并且它工作正常。 但在Tomcat我试图把它startup.bat也在setclasspath.bat ,但没能成功地这样做。


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


另请参见问题:我可以在Tomcat的每个应用程序基础上创建自定义类路径

Tomcat 7上下文保持加载器元素。 根据文档部署描述符( <Context>标签中的内容)可以放置在:

  • $CATALINA_BASE/conf/server.xml - bad - 要求服务器重新启动以重新配置
  • $CATALINA_BASE/conf/context.xml - bad - 在所有应用程序中共享
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml - 错误 - 需要重新打包才能更改配置
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml - 不错,但看最后一个选项!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xml - 不错,但看最后一个选项!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml - 最好 - 完全不在应用程序中并自动扫​​描更改!
  • 在这里,我的配置演示了如何使用$CATALINA_BASE层次结构中的项目文件的开发版本(注意,我将此文件放入src/test/resources目录并构建Maven以通过pom.xml预处理${basedir}占位符<filtering>true</filtering>因此,在构建新环境后,我将它复制到$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%libtools.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%
    

    我没有看到包含的其他变量,所以我认为你坚持编辑setclasspath.bat并改变CLASSPATH的构建方式。 对于Tomcat 6.0.20,此更改类似于setclasspath.bat的74

    set CLASSPATH=C:app_configjava_app;%JAVA_HOME%libtools.jar
    
    链接地址: http://www.djcxy.com/p/23315.html

    上一篇: Adding a directory to tomcat classpath

    下一篇: Face recognition Library