2012-06-27 4 views
5

JAXB가 Java 응용 프로그램의 종속성으로 선언하려는 이유는 JRE와 함께 제공되며 응용 프로그램 클래스 경로에서 재정의 할 수 없기 때문입니다.종속성으로 JAXB 선언. 왜?

예를 들어 jersey-json을 사용하면 POM 파일에서 정확한 버전을 지정하지 않고 jaxb-impl에 대한 종속성을 선언합니다. 이것을함으로써 그들이 얻는 것은 무엇입니까?

또한 내 자신의 POM 파일에서 jersey-json에 종속성을 추가하면 내 클래스 경로에 jaxb-api.jar 및 jaxb-impl.jar가 있습니다. 내가 왜이 일이 일어나길 바랄까? 파일을 승인 된 라이브러리 디렉토리에 저장하지 않으면 기본 JVM 구현이로드되지 않습니까?

+0

포옴 등의 정보를 찾은 정확한 위치를 알려 줄 수 있습니까? – khmarbaise

+0

jersey-json의 pom 파일에 대한 링크가 추가되었습니다. – Muton

답변

0

저지 사람들이 그들의 의존성을 잘못 정의한 것처럼 들립니다. 실행 환경에 종속성이 제공되면 "제공된"범위로 정의해야합니다.

+1

하지만이 경우 rt.jar 자체에 번들로 제공되는 이유는 무엇입니까? – Muton

+0

아니요. 컴파일 종속성으로 필요하기 때문입니다. 그러나 항상 Java 1.6을 사용한다면 정말로 필요하지 않습니다. – khmarbaise

1

나는 링크 된 치어에보고 있어요 :

<dependency> 
     <groupId>com.sun.xml.bind</groupId> 
     <artifactId>jaxb-impl</artifactId> 
    </dependency> 

을하지만 실제 버전 및/또는 범위가 지정된 경우 당신이보고, 그 흔적의 후속 할 수 있도록 부모 치어도있다 거기 (그리고 아래로 전파).

하지만 그렇지 않다면 JAXB 2 API가 JAXB 구현에 대한 느슨한 의존성을 지정할 수 있도록 충분히 성숙했다고 저지 팀이 생각한 것 같습니다.

JRE는 JAXB RI 2.1.7과 가장 유사한 JAXB impl 구현을 제공합니다. 그러나 동시에, 앱에서 다른 구현을 쉽게 교체 할 수있는 메커니즘이 있습니다.

물론 JRE JAXB 구현을 사용할 수 있습니다. 앱에서 작동하는 경우 반드시 시도해야합니다.

그럼에도 불구하고 별도의 JAXB 구현을 원할 수있는 몇 가지 이유가 있습니다. 왼쪽 버그 (최신 릴리스에서 해결됨). JAXB 2.2.x와 같은 새로운 JAXB API가 필요합니다 (JRE의 최신 버전에 있음). 다른 구현체를 사용하고 싶다면 (API 및/또는 특정 용도에 따라 성능이 향상되기 때문) ...

다시 저지 문제에 대해 다시 생각해 봅니다. 개발자는 JAXB 임 플러스를 선택할 수있는 유연성을 제공합니다. 나는 그들이 가이드의 어떤 곳에서 추천 수준을 가지고 있다고 생각한다. 그러나 JAXB RI가 특별히 종속성으로 표시된다는 사실은 인수를 언더컷합니다.

+0

부모에서 범위가 정의되지 않아 프로젝트에 종속성을 갖습니다. – khmarbaise

+1

설명 주셔서 감사하지만 이것은 여전히 ​​나를 위해 완전히 그것을 명확하게하지 않습니다. JRE와 함께 제공되는 버전을 클래스 패스에 다른 버전을 추가하여 간단히 오버라이드 할 수는 없습니다.이를 위해서는 승인 된 표준 재정의 메커니즘 (http://docs.oracle.com/javase/7/docs/technotes)을 사용해야합니다./가이드/표준). 여기 완전히 오인 되나요? 저지 프로젝트의 경우 JAXB의 정확한 버전은 많은 차이를 만듭니다. 그러나 POM 파일에서 JAXB를 관리하는 방법과 컴파일 시간 종속성으로 정의하는 이유를 이해하지 못합니다. – Muton