代码之家  ›  专栏  ›  技术社区  ›  Rajat

向Tomcat类路径添加目录

  •  65
  • Rajat  · 技术社区  · 15 年前

    我的C:驱动器中有一个文件夹 C:\app_config\java_app 此文件夹包含一些特定于区域设置的属性文件。

    我有一个Java类( PrjPropertilesLocator )它在Web应用启动时基于默认区域设置加载属性文件。我的Web应用程序正在Tomcat内部运行。 问题是我应该如何设置这个目录 C:\app\u配置\java\u应用 在tomcat类路径中,这样就可以在 prj属性定位器 班级。 有没有一种方法可以专门为需要它的单个Web应用设置此文件夹。我不想将属性文件放入 WEB-INF/classes 文件夹。

    在WebLogic上,这运行得很好。我在它的启动脚本中设置了WebLogic类路径中的目录,它运行得很好。 但在Tomcat身上,我试着把它放进去 startup.bat 也在 setclasspath.bat ,但未能成功完成。

    5 回复  |  直到 7 年前
        1
  •  119
  •   BalusC    15 年前

    只需在中指定 shared.loader common.loader 性质 /conf/catalina.properties .

        2
  •  27
  •   Community CDub    7 年前

    另见问题: Can I create a custom classpath on a per application basis in Tomcat

    Tomcat 7 Context 持有 Loader 元素。根据 docs 部署描述符 <Context> 标签)可以放在:

    • $CATALINA_BASE/conf/server.xml -错误-需要重新启动服务器才能重新读取配置
    • $CATALINA_BASE/conf/context.xml -坏-在所有应用程序之间共享
    • $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进行预处理 ${basedir} 通过的占位符 pom.xml <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 change syntax for <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>
    
        3
  •  13
  •   Trenton    15 年前

    在Tomcat6中,环境中的类路径被忽略。在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%
    

    我看不到包含的任何其他var,所以我认为您一直在编辑setclasspath.bat并更改类路径的构建方式。对于Tomcat 6.0.20,这个变化就像setclasspath.bat中的74个一样。

    set CLASSPATH=C:\app_config\java_app;%JAVA_HOME%\lib\tools.jar
    
        4
  •  5
  •   ug_    9 年前

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

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

    编辑 MF宣言 类路径属性到 C:\app_config\java_app :

    Using JAR Files: The Basics (Understanding the Manifest)

    享受。

        5
  •  2
  •   Sudhir N    9 年前

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

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