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이 실행되지 않는다는 것입니다.
Maven, Ivy, Gradle 등을 사용합니까? –
원본 라이브러리 코드는 pom.xml과 함께 제공됩니다. Maven을 사용하지 않았기 때문에 jar 파일에 라이브러리를 패키징하고이를 프로젝트의 종속성과 함께 포함 시켰습니다. 실수 일 수도 있고 올바른 일을 듣고 기뻐할 것입니다. –
이것은 당신을 위해 그런 것을 만드는 메이븐입니다. 기본적으로 의존성 버전을 비교합니다. 허용되는 경우 하나만 선택하거나 충돌이있는 곳을 보여줍니다. 라이브러리에서 pom.xml을 게시하면 우리가 보게됩니다. –