2009-08-19 16 views
60

Mam folder na dysku C: jako C:\app_config\java_app Ten folder zawiera pliki właściwości specyficzne dla lokalizacji.Dodawanie katalogu do tomcat classpath

Mam klasę java (PrjPropertilesLocator), która ładuje pliki właściwości na podstawie domyślnych ustawień narodowych podczas uruchamiania aplikacji internetowej. Moja aplikacja internetowa działa w tomcat. Problem polega na tym, jak ustawić ten katalog C:\app_config\java_app w ścieżce klasy tomcat, aby był dostępny dla klasy ResourceBundle wewnątrz klasy PrjPropertilesLocator. Czy istnieje sposób, w jaki można ustawić ten folder specjalnie dla pojedynczej aplikacji internetowej, która tego potrzebuje. Nie chcę umieszczać plików właściwości w folderze WEB-INF/classes.

Na weblogii działa to dobrze. Ustawiam katalog w weblistycznej ścieżce klas w jednym ze skryptów startowych i działa dobrze. Ale na Tomcat próbowałem umieścić go w startup.bat również w setclasspath.bat, ale nie udało mi się zrobić tego z powodzeniem.

+1

Wystarczy przeczytać na ten link http: //www.chemaxon .com/jchem/doc/admin/tomcat.html, że tomcat nie używa systemowej ścieżki klasy. Skopiowałem wszystkie pliki z katalogu C:/app_config/java_app do folderu /lib i zadziałało.Zobacz jak system doatnot używa tomcat classpath. Możemy ustawić folder C: \ app_config \ java_app w jednym z plików startowych tomcatów. – Rajat

+2

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

Odpowiedz

109

Po prostu określ go w shared.loader lub common.loader właściwości /conf/catalina.properties.

+9

Zastanawiam się, czy istnieje sposób na określenie któregokolwiek z nich przy użyciu parametrów wiersza polecenia. Byłoby bardzo przydatny, ponieważ nie musiałbym modyfikować żadnych plików Tomcat, aby to działało ... –

+4

Spędziłem wiele godzin szukając tego rozwiązania. BalusC ponownie przeszedł. – Rhys

+1

Ludzie mogą być zainteresowani [Zrozumieniem Ścieżki Klasy Tomcat - Typowe problemy i jak je naprawić] (https://www.mulesoft.com/tcat/tomcat-classpath) jako świetny artykuł. – DuffJ

12

W Tomcat 6, CLASSPATH w twoim środowisku jest ignorowana. W setclasspath.bat zobaczysz

set CLASSPATH=%JAVA_HOME%\lib\tools.jar 

następnie w catalina.bat, jest używany jak tak

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

nie widzę żadnych innych vars że są włączone, więc myślę, że jesteś utknęły przy edycji pliku setclasspath.bat i zmianie sposobu budowania CLASSPATH. Dla Tomcat 6.0.20, zmiana ta była na jak 74 setclasspath.bat

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

Co proponuję zrobić to dodać katalog META-INF z pliku w pliku .war MANIFEST.MF.

Należy zauważyć, że zgodnie ze specyfikacją serwletu, musi być plik .war, a nie .war do odczytu META-INF/MANIFEST.MF przez kontener.

Edit własnością MANIFEST.MF Class-Path to C:\app_config\java_app:

Zobacz Using JAR Files: The Basics (Understanding the Manifest)

Enjoy.

+0

Cóż, to nie działa dla mnie. Zwróć uwagę na źródła: Możesz potrzebować odwoływania się do klas w innych plikach JAR z pliku JAR. Sposób może działać dla 'jar', ale nie dla mojej aplikacji internetowej. – FaithReaper

20

Zobacz także pytanie: Can I create a custom classpath on a per application basis in Tomcat

Tomcat 7 Context utrzymać Loader element. Według docs deskryptorze (co w <Context> tag) może zostać umieszczona w:

  • $CATALINA_BASE/conf/server.xml - bad - wymagają restartu serwera w celu ponownego odczytania config
  • $CATALINA_BASE/conf/context.xml - zły - wspólne we wszystkich aplikacjach
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml - bad - wymaga przepakowania, aby zmienić konfigurację
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml - nice, ale zobacz ostatnią opcję !!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xml - fajna, ale zobacz ostatnią opcję !!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml - najlepsza - całkowicie wyłączona z aplikacji i automatycznie skanowana pod kątem zmian !!!

Oto mój config, które pokazują, jak korzystać z rozwojowej wersji plików projektów z $CATALINA_BASE hierarchii (należy pamiętać, że umieszczenie tego pliku w src/test/resources dir i intruct Maven do Preprocesuj ${basedir} zastępcze poprzez pom.xml<filtering>true</filtering> więc po zbudować w nowym środowisku I skopiuj go do $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> i <Loader> elementy, odpowiadające udział teraz wyglądać następująco:

<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

Można utworzyć nowy plik setenv.sh (lub setenv.bat) wewnątrz katalogu bin kocury i dodać następującą linię tam

export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR 
Powiązane problemy