我的C:驱动器中有一个文件夹C:\app_config\java_app
此文件夹包含一些特定于语言环境的属性文件。
我有一个java类(PrjPropertilesLocator
),它在Web App启动时基于默认语言环境加载属性文件。我的web应用程序在tomcat中运行。
问题是如何在tomcat类路径中设置此目录C:\app_config\java_app
,以便PrjPropertilesLocator
类中的ResourceBundle可以使用它。
有没有办法我可以专门为需要它的单个Web应用程序设置此文件夹。我不想将属性文件放在WEB-INF/classes
文件夹中。
在weblogic上运行正常。我在其中一个启动脚本中设置weblogic类路径内的目录,它工作正常。
但是在Tomcat上我尝试将它放在startup.bat
setclasspath.bat
中,但是无法成功。
答案 0 :(得分:121)
只需在shared.loader
的{{1}}或common.loader
属性中指定。
答案 1 :(得分:27)
另请参阅问题:Can I create a custom classpath on a per application basis in Tomcat
Tomcat 7 Context持有Loader元素。根据{{3}}部署描述符(<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并通过Maven对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>
更新 docs <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>
答案 2 :(得分:13)
在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
答案 3 :(得分:5)
我建议您在.war文件中添加META-INF
目录和MANIFEST.MF
文件。
请注意,根据servlet规范,它必须是.war文件,而不是容器读取META-INF/MANIFEST.MF
的.war目录。
将MANIFEST.MF
Class-Path属性编辑为C:\app_config\java_app
:
请参阅Using JAR Files: The Basics (Understanding the Manifest)
享受。
答案 4 :(得分:2)
你可以在tomcats bin目录下创建一个新文件setenv.sh(或setenv.bat)并在那里添加以下行
export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR
答案 5 :(得分:0)
我参加聚会可能有点晚,但是我按照以下步骤使用IntelliJ的in-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.