program tip

Tomcat 클래스 경로에 디렉토리 추가

radiobox 2020. 11. 10. 07:59
반응형

Tomcat 클래스 경로에 디렉토리 추가


C:\app_config\java_app이 폴더에는 로케일 특정 속성 파일이 포함되어 있으므로 C : 드라이브에 폴더가 있습니다.

PrjPropertilesLocator웹 앱을 시작할 때 기본 로케일을 기반으로 속성 파일을로드 하는 자바 클래스 ( )가 있습니다. 내 웹 애플리케이션이 tomcat 내부에서 실행 중입니다. 문제는 C:\app_config\java_apptomcat 클래스 경로 에서이 디렉토리 어떻게 설정해야 PrjPropertilesLocator클래스 내의 ResourceBundle에서 사용할 수 있는지 입니다. 이 폴더를 필요로하는 단일 웹 앱에 대해 특별히 설정할 수있는 방법이 있습니까? 속성 파일을 WEB-INF/classes폴더 안에 넣고 싶지 않습니다 .

weblogic에서 이것은 잘 실행됩니다. 시작 스크립트 중 하나에서 weblogic 클래스 경로 내부에 디렉토리를 설정하면 정상적으로 작동합니다. 그러나 Tomcat에서 나는 그것을 startup.bat에도 넣을 시도했지만 setclasspath.bat성공적으로 할 수 없었습니다.


shared.loader또는의 common.loader속성을 지정하십시오 /conf/catalina.properties.


질문 : Tomcat에서 응용 프로그램별로 사용자 정의 클래스 경로를 만들 수 있습니까?

Tomcat 7 컨텍스트 보유 로더 요소. 에 따라 문서의 배치 기술자 (무엇에 <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/resourcesdir에 배치 하고 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>

업데이트 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%

I don't see any other vars that are included, so I think you're stuck with editing setclasspath.bat and changing how CLASSPATH is built. For Tomcat 6.0.20, this change was on like 74 of setclasspath.bat

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

What I suggest you do is add a META-INF directory with a MANIFEST.MF file in .war file.

Please note that according to servlet spec, it must be a .war file and not .war directory for the META-INF/MANIFEST.MF to be read by container.

Edit the MANIFEST.MF Class-Path property to C:\app_config\java_app:

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

Enjoy.


You can create a new file, setenv.sh (or setenv.bat) inside tomcats bin directory and add following line there

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

참고URL : https://stackoverflow.com/questions/1300780/adding-a-directory-to-tomcat-classpath

반응형