向Tomcat类路径添加外部目录

向Tomcat类路径添加外部目录,tomcat,classpath,Tomcat,Classpath,我的C:drive中有一个文件夹,名为C:\app\u config\java\u app 此文件夹包含一些特定于区域设置的属性文件 我有一个java类(PrjPropertilesLocator),它在web应用程序启动时根据默认的语言环境加载属性文件。我的web应用程序在tomcat内部运行。 问题是如何在tomcat类路径中设置此目录C:\app\u config\java\u app,以便PrjPropertilesLocator类中的ResourceBundle可以使用此目录。 有没有

我的C:drive中有一个文件夹,名为
C:\app\u config\java\u app
此文件夹包含一些特定于区域设置的属性文件

我有一个java类(
PrjPropertilesLocator
),它在web应用程序启动时根据默认的语言环境加载属性文件。我的web应用程序在tomcat内部运行。 问题是如何在tomcat类路径中设置此目录
C:\app\u config\java\u app
,以便
PrjPropertilesLocator
类中的ResourceBundle可以使用此目录。 有没有办法专门为需要此文件夹的单个web应用程序设置此文件夹。我不想将属性文件放在
web-INF/classes
文件夹中

在weblogic上运行良好。我在weblogic的启动脚本中设置了weblogic类路径中的目录,它运行良好。
但是在Tomcat上,我尝试将它放入
startup.bat
中,也放入
setclasspath.bat
,但未能成功。在Tomcat 6中,您环境中的类路径被忽略。在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并更改类路径的构建方式。对于Tomcat6.0.20,这一更改类似于setclasspath.bat的74

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

我建议您使用.war文件中的
MANIFEST.MF
文件添加一个
META-INF
目录

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

MANIFEST.MF
类路径属性编辑为
C:\app\u config\java\u app


享受。

只需在
/conf/catalina.properties的
common.loader
属性中指定它即可

Tomcat 7保持元件。根据部署描述符(标签中的内容)可以放置在:

  • $CATALINA_BASE/conf/server.xml
    -错误-需要重新启动服务器才能重新读取配置
  • $CATALINA_BASE/conf/context.xml
    -bad-跨所有应用程序共享
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml
    -bad-需要重新打包才能更改配置
  • $CATALINA_BASE/work/[engineame]/[hostname]/$APP/META-INF/context.xml
    -不错,但请参见最后一个选项
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xml
    -不错,但请参见最后一个选项
  • $CATALINA_BASE/conf/[engineame]/[hostname]/$APP.xml
    -最佳值-完全脱离应用程序,并自动扫描更改
这里是我的配置,它演示了如何使用
$CATALINA_BASE
层次结构之外的项目文件的开发版本(注意,我将此文件放入
src/test/resources
dir和intruct Maven中以预处理
${basedir}
占位符通过
pom.xml
true
因此在新环境中构建后,我将其复制到
$CATALINA_BASE/conf/CATALINA/localhost/$APP.xml
):


更新
元素,相应的部分现在看起来像:

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

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

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

我参加聚会可能会晚一点,但我遵循以下步骤,使用IntelliJ的IDE应用程序测试方式使其完全可配置。我相信最好的方法是结合下面@BelusC的答案

1. run the application using IDE's tomcat run config. 
2. ps -ef | grep -i tomcat //this will give you a good idea about what the ide doing actually.
3. Copy the -Dcatalina.base parameter value from the command. this is your application specific catalina base. In this folder you can play with catalina.properties, application root path etc.. basically everything you have been doing is doable here too. 

只要看看这个链接,tomcat没有使用系统类路径。我将所有文件从C:/app\u config/java\u app复制到了/lib文件夹,它工作了。看起来tomcat没有使用系统类路径。我们可以在一个tomcat启动文件中设置文件夹C:\app\u config\java\u app吗?我想知道是否有办法使用命令行参数指定其中任何一个。这将是非常方便的,因为我不必修改任何Tomcat文件来工作…我已经花了几个小时寻找这个解决方案。BalusC又一次通过了。人们可能会对这篇伟大的相关文章感兴趣。答案并没有满足关键要求:“有没有办法专门为需要它的单个web应用设置此文件夹。”这不是一个解决方案。两个应用程序可能使用相同的配置文件名,因此应用程序必须有自己的唯一类路径才能安全。好吧,这对我来说不起作用。注意源代码:您可能需要从JAR文件中引用其他JAR文件中的类。这种方法可能适用于
jar
,但不适用于我的web应用程序。有人举过这样的例子吗?我们已经玩了一段时间了,但是还不能正确地将东西添加到类路径中让应用程序看到。
1. run the application using IDE's tomcat run config. 
2. ps -ef | grep -i tomcat //this will give you a good idea about what the ide doing actually.
3. Copy the -Dcatalina.base parameter value from the command. this is your application specific catalina base. In this folder you can play with catalina.properties, application root path etc.. basically everything you have been doing is doable here too.