2008-11-28 2 views
10

그래서 Eclipse에서 제대로 빌드하고 디버그하는 웹 서비스 프로젝트 (동적 웹 프로젝트)로 시작했습니다. 우리는 공유 라이브러리에 넣으려는 공통 코드 조각을 뽑아 냈으므로 이제는 웹 프로젝트가 참조하는 별도의 jar 프로젝트로 들어갑니다.Eclipse 디버그 시간 클래스 경로 문제 : 종속 프로젝트의 결과를 웹 프로젝트의 런타임 클래스 경로에 어떻게 포함 시키나요?

웹 프로젝트에서 프로젝트 -> 등록 정보 -> Java 빌드 경로 -> 프로젝트 -> 추가 및 jar 프로젝트 추가. 그리고 이것은 모든 컴파일 타임 클래스 패스 문제를 올바르게 해결하고 모든 것이 잘됩니다. 그러나 런타임에 Tomcat 서버가 작동하면 spring은 jar 파일에 포함 된 클래스 중 일부를 주입하려고 시도하고 NoClassDefFoundError를 얻습니다.

내의 .class 및 특성 파일과 내 META-INF 디렉토리의 내용은 ./build 디렉토리에 표시되지만, 내 WEB-INF/lib 디렉토리는 현재 위치에서 참조 할 것, 그리고 항아리 종속성 아무튼 웹 응용 프로그램 라이브러리의 일부로 표시되기 위해 복사됩니다.

다른 jar 프로젝트가 런타임에 바람둥이에게 제공되어야한다고 이클립스에게 이야기하는 마법의 주문은 무엇입니까? 우리의 개미 빌드 스크립트에서, 우리는 먼저 WEB-INF/lib에 다른 프로젝트를 빌드하고 모든 것이 잘 작동하지만 일식 디버깅에는 적합하지 않습니다.

답변

9

Java EE 모듈 종속성으로 인해이 문제가 해결됩니다. 다른 프로젝트가이 클래스에 의존하기 때문에 공용 클래스를 자체 프로젝트 ()로 추출해야합니다. 어쨌든, 이것이 일반 Java 프로젝트가 아니라 Utility 프로젝트 (프로젝트 마법사의 Java EE 아래에 있음)인지 확인해야합니다. 완료되면, 당신이 알아 낸대로 Utility 프로젝트를 빌드 경로 (컴파일 타임 경로)에 추가 할 수 있습니다.

동적 웹 프로젝트와 공유 라이브러리 사이에 Java EE 모듈 종속성을 설정하면 배포 중에 유틸리티 클래스를 WEB-INF \ lib에 놓을 수 있습니다. 전쟁. 이를 수행하려면 동적 웹 프로젝트의 특성을보고 Java EE 모듈 종속성을 찾으십시오. 유틸리티 프로젝트가 여기에 선택되어 있는지 확인하십시오. 애플리케이션을 재배포/게시하면 좋은 결과를 얻으실 수 있습니다.

+0

그 트릭을 수행 한 것 같지만, "유틸리티"프로젝트에 관해 당신이 말한 것에 대해 확실하지 않습니다. .project 파일이나 .settings/내에서 볼 수있는 것이 그것이 올바른 유형인지 알려주겠습니까? –

+0

유틸리티 프로젝트는 J2EE 컨텍스트에 적합하지만 Java 프로젝트입니다. 그것들은 엔터프라이즈 애플리케이션의 여러 프로젝트에서 공유되는 코드 (써드 파티 JAR이 아닌)를 나타냅니다. 보통 이들은 여러 EJB와 종종 단일 웹 모듈에서 사용되는 클래스입니다. –

+0

일반적으로 유틸리티 프로젝트는 클래스 경로에 자동으로 추가되는 서버의 런타임 JAR를 갖기 때문에 보통 바닐라 Java 프로젝트에는 유틸리티 프로젝트를 배치하지 않습니다. 예를 들어 컨테이너의 JAR을 빌드 경로에 추가하지 않고 동일한 프로젝트의 데이터 소스를 활용할 수 있습니다. –

10

나는 그것에 시간을 투자 한 후에 이것을 알아 냈습니다. Eclipse Helios에 있다면 properties > deployment assembly > add > project으로 이동하여 추가 할 종속 프로젝트를 선택하십시오.

+0

EAR을 사용하지 않는 경우 더 정확하고 유용한 답변입니다. –