8.4. 누락된 종속성을 추적하는 방법

누락된 종속 항목을 추적하려면 다음 단계를 수행합니다.

  1. bundle:diag console 명령을 사용합니다. 이렇게 하면 번들이 비활성화된 이유에 대한 정보가 제공됩니다. 사용 정보는 Apache Karaf 콘솔 참조 에서 참조하십시오.
  2. 빠른 검사를 수행하여 모든 필수 번들 및 기능이 실제로 OSGi 컨테이너에 설치되어 있는지 확인합니다. bundle:list 를 사용하여 설치된 번들을 확인하고 features:list 를 사용하여 설치된 기능을 확인할 수 있습니다.
  3. bundle:install console 명령을 사용하여 번들을 설치(시작하지 않음)합니다. 예를 들면 다음과 같습니다.

    karaf@root()> bundle:install MyBundleURL
  4. bundle:dynamic-import console 명령을 사용하여 방금 설치한 번들에서 동적 가져오기를 활성화합니다. 예를 들어 번들의 번들 ID가 218인 경우 다음 명령을 입력하여 이 번들에서 동적 가져오기를 활성화합니다.

    karaf@root()> bundle:dynamic-import 218

    이 설정을 사용하면 OSGi에서 컨테이너에 이미 설치된 번들을 사용하여 종속성을 확인할 수 있으므로 일반적인 종속성 확인 메커니즘( Import-Package 헤더 기반)을 효과적으로 우회할 수 있습니다. 이는 버전 검사를 우회하기 때문에 정상적인 배포에 대해 기억되지 않습니다. 잘못된 버전의 패키지를 쉽게 선택하여 애플리케이션이 오작동할 수 있습니다.

  5. 이제 번들을 확인할 수 있습니다. 예를 들어 번들 ID가 218인 경우 followng console 명령을 입력합니다.

    karaf@root()> bundle:resolve 218
  6. 이제 번들이 해결되었다고 가정하면 package :imports명령을 사용하여 번들에 연결된 모든 패키지 목록을 가져올 수 있습니다. 예를 들어 번들 ID가 218인 경우 다음 console 명령을 입력합니다.

    karaf@root()> package:imports -b 218

    콘솔 창에 종속 패키지 목록이 표시됩니다.

    Package                              │ Version       │ Optional   │ ID  │ Bundle Name
    ─────────────────────────────────────┼───────────────┼────────────┼─────┼──────────────────────────────────
    org.apache.jasper.servlet            │ [2.2.0,3.0.0) │ resolved   │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.jasypt.encryption.pbe            │               │ resolved   │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.ops4j.pax.web.jsp                │ [7.0.0,)      │ resolved   │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.ops4j.pax.web.service.spi.model  │ [7.0.0,)      │            │ 217 │ org.ops4j.pax.web.pax-web-runtime
    org.ops4j.pax.web.service.spi.util   │ [7.0.0,)      │            │ 217 │ org.ops4j.pax.web.pax-web-runtime
    ...
  7. 번들 JAR 파일의 압축을 풀고 META-INF/MANIFEST.MF 파일의 Import-Package 헤더 아래에 나열된 패키지를 확인합니다. 이 목록을 이전 단계에서 발견된 패키지 목록과 비교합니다. 이제 매니페스트의 Import-Package 헤더에서 누락된 패키지 목록을 컴파일하고 이러한 패키지 이름을 프로젝트의 POM 파일에 있는 Maven 번들 플러그인 구성의 Import-Package 요소에 추가합니다.
  8. 동적 가져오기 옵션을 취소하려면 OSGi 컨테이너에서 이전 번들을 제거해야 합니다. 예를 들어 번들 ID가 218인 경우 다음 명령을 입력합니다.

    karaf@root()> bundle:uninstall 218
  9. 이제 가져온 패키지 목록을 사용하여 번들을 다시 빌드하고 OSGi 컨테이너에서 테스트할 수 있습니다.

addurl :experimental: :toclevels: 4 :numbered: