2012-08-29 3 views
4

Java EE 6 플랫폼에서 엔터프라이즈 응용 프로그램을 개발 중입니다. IDE는 NetBeans 7.2이고 응용 프로그램 서버는 GlassFish 3.1.2.2입니다.Java (EE)에서 충돌하는 종속성을 처리하는 방법

비즈니스 로직은 핵심 작업을 처리하기 위해 라이브러리 (HBase-RDF)를 사용해야합니다. 원래의 HBase-RDF 코드는 Glassfish가 이미 사용하고있는 새로운 패키지가 많은 패키지에 의존합니다. 예를 들어, jar 파일에 이미 포함되어있는 javax.xml, javax.activation, com.sun.jersey 및 유사한 패키지를 볼 수 있습니다.

과거에별로 좋았던 Java EE 응용 프로그램을 개발했지만 이전과 달리 응용 프로그램을 개발하는 데 수없이 많은 두통이 닥쳤습니다. 수십개의 stackoverflow 질문과 버그 추적 시스템을 포함하여 내가 웹에서 읽었던 것부터, 모든 종속성을 가진 원본 라이브러리 (HBase-RDF)를 패키지로 만들 수 있다면 그 두통을 제거 할 수있을 것 같아요. 전체 병 파일을 만들고 프로젝트에 직접 포함시키지 마십시오.

첫 번째 질문은 문제의 원인에 관한 것입니까? 이것이 내 문제의 근원이 될 수 있을까? 그 대답은 '예'일 것입니다. 왜냐하면 JAXB와 Xerces jars를 classpath에서 제거하고 다행스럽게도 Hbase-RDF의 해당 부분을 사용하지 않기 때문에 문제가 해결 되었기 때문입니다.

두 번째 질문은 이전 질문에 대한 내용 인 경우 어떻게합니까? 이러한 라이브러리를 하나의 라이브러리 (Hbase-RDF)에서만 사용하도록 어떻게 제한 할 수 있습니까?


참고 : 빌드 프로세스가 아무 문제없이 종료라고하는 것이 유용 할 수 있습니다,하지만 난 배포 프로젝트를 실행하는 두 가지 주요 문제에 직면 해있다. 첫째, netbeans와 함께 설치되는 My 로컬 Glassfish 인스턴스에 응용 프로그램이 성공적으로 배포되지만 동일한 .ear 패키지가 다른 동일한 버전의 인스턴스에 배포되지 않으며 server.log 파일에 문제의 원인을 찾는 데 도움이되는 내용이 포함되어 있지 않습니다. . 이 오류는 this과 매우 유사하지만 제안 된 솔루션이 작동하지 않습니다. 두 번째 문제는 this과 매우 유사하며 다시 한 번 모든 제안 된 솔루션을 사용해 보았습니다. 흥미로운 것은 웹 모듈 내부의 웹 서비스가 EJB를 성공적으로 호출하지만 JSF facelet 인 index.html이 실행되지 않는다는 것입니다.

+0

Maven, Ivy, Gradle 등을 사용합니까? –

+0

원본 라이브러리 코드는 pom.xml과 함께 제공됩니다. Maven을 사용하지 않았기 때문에 jar 파일에 라이브러리를 패키징하고이를 프로젝트의 종속성과 함께 포함 시켰습니다. 실수 일 수도 있고 올바른 일을 듣고 기뻐할 것입니다. –

+2

이것은 당신을 위해 그런 것을 만드는 메이븐입니다. 기본적으로 의존성 버전을 비교합니다. 허용되는 경우 하나만 선택하거나 충돌이있는 곳을 보여줍니다. 라이브러리에서 pom.xml을 게시하면 우리가 보게됩니다. –

답변

0

빌드 프로세스 또는 배포에 대한 우려가 있는지는 잘 모르겠습니다.
배포를 위해 이미 배포 한 라이브러리의 다른 버전에 종속 된 라이브러리가있는 경우 OSGi (동일한 클래스 로더가있는 라이브러리의 두 버전을 모두 가질 수 없음)을 사용하지 않고는 작업 할 수 없습니다.
종속 라이브러리를 완전히 제거하고 최신 버전 만 사용해 보셨습니까?
유일한 종속성이 JAXB 및 java xml 패키지 인 경우 운이 좋을 수도 있습니다

+0

나는 이것을 이미 시도했다. 라이브러리 내부의 코드가 손상됩니다. 그것은 이전 버전과의 호환성 문제이거나, 내가하고있는 일에 대해 확신을 갖고 있음에도 불구하고 새로운 라이브러리에 없었던 것을 제거했을 수도 있습니다. javax와 같은 패키지조차도서블릿은 종속성으로 포함되어 있습니다 ... –

+0

공용 라이브러리 만 제거하려고합니까? – Cratylus

+0

내가 생각할 수있는 마지막 것이므로 질문을 게시하기 전에 이것을 시도했다. 라이브러리 코드가 손상됩니다. –

관련 문제