2012-05-22 6 views
4

Eclipse 3.7.2에서 많은 프로젝트를 만들었습니다. 의 그들의 이름 일부를 들어 보겠습니다 :Eclipse WTP의 프로젝트 간 종속성

  • W (동적 웹 프로젝트)
  • A (일부 라이브러리)
  • B (일반 물건의 많은 도서관, 그 너무 다른 프로젝트에서 사용됩니다)

프로젝트 A는 프로젝트 B에 따라 달라 지므로 B는 A의 빌드 경로에 있습니다. 프로젝트 W는 프로젝트 A에 의존하므로 W를 배치 어셈블리로 A를 추가했습니다.

Eclipse 내에서 WAR를 내보낼 때 A에 대한 JAR 파일 만 WEB-INF/lib에 추가됩니다. Eclipse는 다음 경고를 표시합니다.

클래스 경로 항목/B는 내보내기 또는 게시되지 않습니다. 런타임 ClassNotFoundExceptions이 발생할 수 있습니다.

경고가 정확합니다. 나는 런타임에 ClassNotFoundExceptions를 얻는다. 물론 Eclipse는 "관련 원시 클래스 경로 항목을 게시/내보내기 종속으로 표시"하는 경고에 대한 빠른 수정을 제공합니다. 그러나 이것은 내 문제를 해결하지 못합니다. B는 여전히 W와 함께 배포되지 않습니다.

A에서 배포 어셈블리로 B를 수동으로 추가하려고했습니다. 그건 A.jar 내의 B.jar를 포함하는데, 실제로는 원하는 것이 아니며 여전히 ClassNotFoundExceptions를 얻습니다.

작동하는 유일한 것은 수동으로 W를 배치 어셈블리로 B를 추가하는 것입니다. Eclipse는 위에서 경고를 표시하지만 런타임 예외는 사라졌습니다.

나는 뭔가를 놓치고 있습니까? 아니면 이걸 실제로 얻을 수있는 유일한 방법입니까?

+0

m2eclipse 플러그인을 사용하고 있습니까? 전쟁을 생성하기 위해 Maven 빌드를 사용하고 있습니까? –

+0

현재 Maven을 사용하여 전쟁을 구축하고 있지 않습니다. 그것은 내가 앞으로하고 싶은 일 중 하나입니다. 그때까지 나는 이클립스로 전쟁을 만들고 그것의 수출 기능이다. –

+0

A의 빌드 경로 구성에서 B를 "내 보낸"으로 설정하십시오. – miniBill

답변

4

Eclipse의 "Export/Web/WAR File"을 작동 시키려면 프로젝트 "b"를 "Web App Libraries"컨테이너에 나타나게해야합니다.

당신은 프로젝트 속성에 배치 어셈블리 페이지를 사용하여 배포 구성을 편집하고 거기에서 프로젝트 "B"를 추가 할 수 있습니다

deployment assembly

을 다른 방법으로, /w/.settings/org.eclipse.wst.common.component에서 구성 파일을 열고 프로젝트에 대한 참조를 추가 할 수 있습니다 수동으로 "B"가 완료되면

<?xml version="1.0" encoding="UTF-8"?> 
<project-modules id="moduleCoreId" project-version="1.5.0"> 
    <wb-module deploy-name="w"> 
     <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/> 
     <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/> 
     <dependent-module archiveName="a.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/a/a"> 
      <dependency-type>uses</dependency-type> 
     </dependent-module> 
     <dependent-module archiveName="b.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/b/b"> 
      <dependency-type>uses</dependency-type> 
     </dependent-module> 
     <property name="context-root" value="w"/> 
     <property name="java-output-path" value="/w/build/classes"/> 
    </wb-module> 
</project-modules> 

, 당신은 프로젝트 "B"를 볼 수 있습니다 WAR 파일에 "웹 응용 프로그램 라이브러리"클래스 패스 컨테이너와 수출도 우리에 b.JAR가 추가됩니다 B-INF/lib.

+0

답변을 주셔서 감사합니다. 이미 솔루션을 알고 있습니다. 나는 그것을 할 수있는 더 좋은 방법이 있기를 희망했다. 이상적으로 Eclipse는 b.jar를 자동으로 추가합니다. 왜냐하면 a가 이미 b에 의존한다는 것을 이미 알고 있기 때문입니다. 어떻게 든 그것은 WTP가 이런 종류의 의존성을 지원하지 않는 것처럼 보입니다. –

+1

Maven과 m2eclipse를 WTP 지원과 함께 사용하면 전이 의존성을 가진 프로젝트 구성이 올바르게 생성됩니다. –

+0

Maven을 곧 살펴 봐야 할 것 같습니다. –