2009-08-19 3 views
60

У меня есть папка на моем диске C: C:\app_config\java_app В этой папке содержатся некоторые файлы свойств, специфичные для локали.Добавление каталога в путь класса tomcat

У меня есть класс java (PrjPropertilesLocator), который загружает файлы свойств на основе локали по умолчанию при запуске веб-приложения App.My работает внутри tomcat. Проблема заключается в том, как установить этот каталог C:\app_config\java_app в пути класса tomcat, чтобы он стал доступным для ResourceBundle внутри класса PrjPropertilesLocator. Есть ли способ, которым я могу установить эту папку специально для одного веб-приложения, которое нуждается в нем. Я не хочу помещать файлы свойств в папку WEB-INF/classes.

В weblogic это работает отлично. Я устанавливаю каталог внутри пути classtextlog в одном из его сценариев запуска, и он отлично работает. Но на Tomcat я попытался положить его в startup.bat также в setclasspath.bat, но не смог сделать это успешно.

+1

Просто читайте по этой ссылке HTTP: //www.chemaxon .com/jchem/doc/admin/tomcat.html, что tomcat не использует системный путь к классам. Я скопировал все файлы из C:/app_config/java_app в папку /lib, и это сработало. Похоже, что tomcat doestnot использует систему classpath.Can мы устанавливаем папку C: \ app_config \ java_app внутри одного из файлов запуска tomcats. – Rajat

+2

http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html – jack

ответ

109

Просто укажите его в shared.loader или common.loader Недвижимость /conf/catalina.properties.

+9

Интересно, есть ли способ указать какие-либо из них с помощью параметров командной строки. Это было бы очень удобно, так как мне не пришлось бы изменять файлы Tomcat, чтобы это работало ... –

+4

Я потратил часы на поиск этого решения. Еще раз BalusC прошел. – Rhys

+1

Люди могут быть заинтересованы в [Понимание Пути классов Tomcat - Общие проблемы и способы их устранения] (https://www.mulesoft.com/tcat/tomcat-classpath) как отличная статья. – DuffJ

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 это изменение было на как 74 setclasspath.bat

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

То, что я предлагаю вам сделать, это добавить каталог META-INF с MANIFEST.MF файлом в .war файле.

Обратите внимание: согласно спецификации сервлетов, это должен быть файл .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', но не для моего веб-приложения. – FaithReaper

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 - плохой - требуют перезагрузки сервера для того, чтобы перечитать 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 - best - полностью из приложения и автоматически отсканировано за изменения !!!

Вот мой конфиг, которые показывают, как использовать разрабатываемую версию файлов проект из $CATALINA_BASE иерархии (обратите внимание, что я поместить этот файл в src/test/resources каталог и 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

Вы можете создать новый файл, setenv.sh (или setenv.bat) внутри директории Tomcats бен и добавьте следующую строку там

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