번들 및 패키지 버전화
모든 번들 또는 내보내기 패키지에는 특정 형식의 버전 번호가 있으며 모든 가져오기 패키지 명령문에는 버전 범위가 있습니다. 버전 범위를 지정할 때 현재 정책과 우수 사례, 이전 버전 및 이후 버전과의 호환성을 위한 요구사항을 고려해야 합니다.
버전 번호
모든 번들 또는 내보내기 패키지에는
버전 번호가 있습니다. 이 버전 번호는 다음 형식의 최대 3자리 숫자로
구성됩니다.
9.9.9첫 번째 숫자는 버전 번호의
주요 컴포넌트를 지정합니다. 두 번째 번호(있는 경우)는 버전 번호의
부 컴포넌트를 지정하고 세 번째 번호(있는 경우)는 버전 번호의
마이크로 컴포넌트를 지정합니다. 구성 요소 수준을 생략할 경우 마침표(.)도 생략합니다 그 구성 요소 수준보다 앞선 단계에서 발생하는. 예를 들어 다음 세 개의 숫자는 모두
동일한 버전을 지정합니다.9
9.0
9.0.0OSGi 버전화 정책에 따라 번들 또는 내보내기 패키지의 새
버전이 이전 버전과 호환되지 않으면
번들 또는 패키지의 주요 버전 번호를 증분합니다.버전 범위
모든 패키지 가져오기 명령문은
버전 범위를 지정합니다. OSGi Alliance에서는
버전 범위를 지정하는 데 다음 우수 사례를 권장합니다.
- 이용 중인 번들에 필요한 패키지의 최소 버전을 하한 범위로 지정합니다.
- 상한 범위로 부 버전을 포함하되, 패키지 주 버전에서 증분을 제외합니다.
- 열기 대괄호 [ 또는 닫기 대괄호 ]는
지정된 범위의 끝 포함
을 의미합니다. - 열기 소괄호 ( 또는 닫기 소괄호 )는
지정된 범위의 끝 제외
를 의미합니다.
Import-Package: com.myco.a.pkge;version="[1.0,2.0)"
버전 1.3 패키지는 버전 1.0 패키지와 호환되므로, 버전 1.0 이상의 패키지가 필요한 번들이 버전 1.3 패키지에 대해 분석된 경우 작동합니다. 그러나 버전 2.0 패키지에 대해 분석된 경우에는 번들이 작동하지 않으므로, 버전 2.0 이사 버전은 제외됩니다.
참고:
- 새 메소드를 인터페이스에 추가할 때 내보내기 패키지 헤더에서
부 버전 번호가 증분됩니다. 또한 인터페이스의 이전 버전을 구현하는 클래스는
새 버전에서도 작동할 수 있지만, 새 버전은
명시적으로 지정된 경우에만 사용 가능합니다. 이 경우
인터페이스를 포함하는 패키지를 가져오는 번들은
예를 들어,
"[1.0,1.1)"을 지정해야 합니다. Java™ 커뮤니티 프로세스(JCP)는 API를 정의할 때 패키지 버전과 같은 OSGi 메타데이터를 정의하지 않습니다. 현재 OSGi 버전은 Java 기술을 참조하는 OSGi 사양에서 정의됩니다. JCP 스펙의 이후 버전은 이전 버전과 호환되므로, 이러한 이후 스펙에 대한 OSGi 패키지 버전화 정책은 단순히 JCP 스펙 버전을 반영할 수 있습니다. 그 결과 최신 버전이 이전 버전과 호환되는 경우에도 javax 패키지의 주 버전이 변경됩니다. 예를 들어, Java Persistence API(JPA) 2.0 는 이전 버전인 JPA 1.0 와 호환됩니다. javax.persistence 패키지 버전은 JCP 스펙 이름을 준수하며 버전 2.0을 사용한다고 예상할 수 있습니다. 그러나 실제로 OSGi 버전화 정책을 준수하며 버전 1.1을 사용합니다.
JCP 스펙은 항상 이전 버전과의 호환성을 유지보수하려고 시도하므로 javax.* 패키지에 대한 최소 패키지 버전만 지정하고 상한은 지정하지 않아야 합니다. 예를 들어, 향후 버전의 WebSphere® Application Server 이 2.0 버전보다 최신 버전의 JPA를 구현하는 기본 JPA 공급자를 포함한다고 가정해 보자. 이 경우 애플리케이션 서버는 해당 버전의 이후 버전에서 javax.persistence 패키지를 내보낼 수 있으며, JPA 1.0 또는 2.0에서 작동하도록 작성된 애플리케이션에 의해 계속 해석됩니다. 마찬가지로, 다음 예제 import 문은 1.0 이상의 모든 javax.persistence 패키지 버전에 대해 분석될 수 있습니다.Import-Package: javax.persistence;version="1.0"