문제

요약

Linux + tomcat5.5에 배포된 웹앱에서 모두 사용/볼 수 있습니까? /usr/share/java/ 항아리가 자동으로?

세부

저는 Ubuntu용 Java 웹앱을 패키징하고 있으며(아직 문제는 Linux 기반 배포판과 관련이 있습니다) Tomcat에 의존하도록 만들 예정입니다.

컨텍스트 설명자(xml 파일)를 /usr/share/tomcat5.5/conf/Catalina/localhost/ 내 앱을 배포하려면여기에 내 웹 디렉토리가 있습니다. /usr/share/<appname>/web, 시스템에 설치된 Java jar 라이브러리를 사용하도록 앱을 활성화하려면 어떻게 해야 합니까?(/usr/share/java)?

나는 단지 심볼릭 링크를 할 수 없다 /usr/share/java -> <webdir>/WEB-INF/lib, 제가 ​​맞춤 제작한 병을 가지고 있기 때문에 lib 디렉토리.

나쁜 해결책

지금까지 내가 찾은 해결책은 필요한 각 병을 심볼릭 링크하는 것입니다. <webdir>/WEB-INF/lib/.

많은 jar를 심볼릭 링크해야 하고 더 나쁜 것은 직접 종속성 lib(jar)가 요구하는 모든 jar를 심볼릭 링크해야 하기 때문입니다.내 직접 종속성 lib가 필요한 jar 목록을 변경하는 경우 해당 심볼릭 링크를 유지해야 합니다.

도움이 되었습니까?

해결책

그렇게 해서는 안 됩니다.Java EE 애플리케이션은 자체적으로 충분하며 컨테이너에서 제공하는 것 이외의 배포 패키지 외부 리소스에 의존하지 않는 것으로 간주됩니다.따라서 해당 디렉토리에서 필요한 libs를 가져와 war 또는ear 패키지에 추가해야 합니다.

이렇게 하면 애플리케이션을 배포할 때마다 동일하게 작동하고 /usr/share/java에 있는 libs 버전이 예기치 않게 변경되지 않습니다....

다른 팁

에 따르면 Tomcat 클래스 로딩 문서, 모든 Tomcat 앱에서 사용할 수 있는 공유 라이브러리를 $CATALINA_BASE/shared/lib 라이브러리에 넣어야 합니다. 따라서 원하는 작업을 수행하는 한 가지 방법은 /usr/share/에서 라이브러리를 이동하는 것입니다. java를 $CATALINA_BASE/shared/lib로 변환합니다.

그러나 동일한 문서를 오해하지 않는다면 Tomcat은 시작 시 시스템 전체 CLASSPATH 변수의 내용을 클래스로더에서 사용할 수 있도록 합니다. 따라서 디렉토리(/usr/share/java)가 시스템 전체 CLASSPATH에 포함된 경우 변수라면 그것도 작동할 것입니다.하지만 저는 이런 일을 해본 적이 없습니다.$CATALINA_BASE/shared/lib의 내용을 Tomcat 전체에서 사용할 수 있게 만드는 Tomcat의 방법은 항상 나에게 완벽하게 도움이 되었습니다.

entzik의 답변은 다음 해결책으로 이어졌습니다.

수정된 "나쁜 솔루션"을 사용하겠습니다(질문 참조).

수정 사항은 다음과 같습니다:

  1. 모든 종속성에 대해 특정 패키지 버전에 따라 다름(deb용으로 패키징하는 동안 "제어" 파일에 영향을 줌)
    예: libcommons-io-java ( = 1.3.1) 그냥 대신에 libcommons-io-java
  2. "일반화된" 파일이 아닌 `/usr/share/java`에 있는 실제 jar 파일에 대한 심볼릭 링크
    예:
    webdir/WEB-INF/lib/commons-io.jar -> /usr/share/java/commons-io-1.3.1.jar
    그리고는 아니다
    webdir/WEB-INF/lib/commons-io.jar -> /usr/share/java/commons-io.jar

이러한 수정은 관리자가 새 버전의 라이브러리(예: commons-io)를 설치한 경우 webapp이 손상되지 않도록 보장합니다.

단점은 이 접근 방식이 하나의 앱에서만 사용되는 라이브러리 버전으로 시스템을 분명히 부풀리고 버전 충돌로 인해 다른 애플리케이션/라이브러리가 설치할 수 없는 문제를 일으킬 수 있다는 것입니다.도서관에 관해 이야기한다면 두 가지 잠재적인 문제는 모두 사소한 것 같습니다.

두 가지 옵션이 있습니다. 하나는 클래스 로더가 모든 Java 프로그램에 라이브러리를 제공하도록 하는 것이고, 다른 하나는 클래스 로더가 모든 Tomcat 컨텍스트에 라이브러리를 제공하도록 하는 것입니다.

모든 Java 프로그램이 이러한 라이브러리에 액세스할 수 있도록 /usr/lib/jvm/java-1.5.0-sun-1.5.0.11/jre/lib(이 경로에서 다른 버전을 지정해야 할 수도 있음)에 심볼릭 링크를 추가하거나 모든 Tomcat 컨텍스트에서 액세스할 수 있도록 var/lib/tomcat5.5/shared/libs(버전 번호는 다를 수 있음)에 있는 Tomcat의 공유 라이브러리에 추가하세요.

또한 이 디렉토리 위치는 Ubuntu "Feisty"에서 가져온 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top