Ответ 1
Просто укажите его в shared.loader
или common.loader
свойстве /conf/catalina.properties
.
У меня есть папка на моем диске C: C:\app_config\java_app
Эта папка содержит некоторые файлы свойств, специфичные для локали.
У меня есть класс java (PrjPropertilesLocator
), который загружает файлы свойств на основе языкового стандарта по умолчанию при запуске веб-приложения App.My, работающего внутри tomcat.
Проблема в том, как установить этот каталог C:\app_config\java_app
в пути класса tomcat, чтобы он стал доступным для ResourceBundle внутри класса PrjPropertilesLocator
.
Есть ли способ, которым я могу установить эту папку специально для одного веб-приложения, которое нуждается в ней. Я не хочу помещать файлы свойств в папку WEB-INF/classes
.
В weblogic это выполняется отлично. Я устанавливаю каталог внутри пути classtextlog в одном из его сценариев запуска, и он отлично работает.
Но на Tomcat я попытался поместить его в startup.bat
также в setclasspath.bat
, но не смог сделать это успешно.
Просто укажите его в shared.loader
или common.loader
свойстве /conf/catalina.properties
.
См. также вопрос: Могу ли я создать собственный путь к классам для каждого приложения в Tomcat.
Tomcat 7 Context удерживать Loader. Согласно docs дескриптор развертывания (что в теге <Context>
) можно поместить в:
$CATALINA_BASE/conf/server.xml
- bad - требуется перезагрузка сервера для перезаписи config$CATALINA_BASE/conf/context.xml
- плохой общий доступ во всех приложениях$CATALINA_BASE/work/$APP.war:/META-INF/context.xml
- bad - требуется переупаковка, чтобы изменить конфигурацию$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 для препроцессора ${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>
UPDATE Синтаксис изменения 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%\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 это изменение было похоже на 74 setclasspath.bat
set CLASSPATH=C:\app_config\java_app;%JAVA_HOME%\lib\tools.jar
Я предлагаю вам добавить каталог META-INF
с файлом MANIFEST.MF
в .war файл.
Обратите внимание, что согласно спецификации сервлета, это должен быть файл .war, а не каталог .war для META-INF/MANIFEST.MF
, который должен быть прочитан контейнером.
Измените свойство MANIFEST.MF
Class-Path на C:\app_config\java_app
:
См. Использование файлов JAR: основы (понимание манифеста)
Enjoy.
Вы можете создать новый файл setenv.sh(или setenv.bat) внутри каталога bin tomcats и добавить следующую строку там
export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR