2009-08-19 177 views
60

我在C:驱动器中有一个文件夹为C:\app_config\java_app 此文件夹包含一些特定于语言环境的属性文件。将目录添加到tomcat类路径

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

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

+1

刚上这个链接HTTP阅读://www.chemaxon .com/jchem/doc/admin/tomcat.html,那个tomcat并没有使用系统classpath.I将所有文件从C:/ app_config/java_app复制到/lib文件夹并且它工作正常。看起来像tomcat doestnot use system classpath.Can我们可以在tomcat启动文件中设置文件夹C:\ app_config \ java_app。 – Rajat 2009-08-19 16:34:32

+2

http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html – jack 2010-11-06 16:07:35

回答

109

只是在/conf/catalina.propertiesshared.loadercommon.loader财产指定。

+9

我想知道是否有一种方法可以使用命令行参数来指定其中的任何一种。这将非常方便,因为我不需要修改任何Tomcat文件以使其正常工作... – 2012-02-11 19:59:31

+4

我花了数小时寻找这个解决方案。 BalusC又一次通过了。 – Rhys 2013-02-13 06:33:33

+1

作为一篇很好的相关文章,人们可能会对[了解Tomcat类路径 - 常见问题以及如何修复它们](https://www.mulesoft.com/tcat/tomcat-classpath)感兴趣。 – DuffJ 2015-05-06 14:00:38

12

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

我没有看到所包含的任何其他增值经销商,所以我觉得你坚持编辑setclasspath.bat并更改CLASSPATH的构建方式。对于Tomcat 6.0.20,这种变化是对的的setclasspath.bat像74

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

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

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

编辑MANIFEST.MF类路径属性C:\app_config\java_app

Using JAR Files: The Basics (Understanding the Manifest)

享受。

+0

嗯,它不适合我。请注意放置的源代码:您可能需要从JAR文件中引用其他JAR文件中的类。这种方式可能适用于'jar',但不适用于我的web应用程序。 – FaithReaper 2016-03-08 12:57:34

20

参见问题: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 DIR和intruct 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> 

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

您可以创建内部雄猫bin目录中的新文件,setenv.sh(或setenv.bat),并添加以下行有

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