2011-12-13 1 views
16

WAR 오버레이 (3 개의 스택을 사용)를 사용하는 다중 모듈 Maven 프로젝트가 있습니다. 모든 것이 Maven에서 잘 작동하지만 다양한 파일을 찾지 못한다고 불평하기 때문에 Eclipse 내에서 WAR를 시작할 수 없습니다.Eclipse에서 Maven WAR 오버레이를 처리하는 방법은 무엇입니까?

먼저 Maven 설치를 수행하지 않고 Eclipse에서 WAR를 실행할 수 있도록 Eclipse (및 시작 프로그램)를 구성 할 수 있습니까? Eclipse WAR 프로젝트가 동적 인 웹 프로젝트가 아니라고 덧붙여 야합니다 ... 제가해야 할 일의 일부입니까?

참고 : 주제에 관해서는 다음과 같은 질문이 나오지만, Maven없이 이클립스를 사용하는 사람들이 있기 때문에 항상 먼저 Maven 설치를 먼저 수행해야한다는 것을 알고 있습니다.

Maven overlays and Eclipse

나는 또한 나를이 바닐라 M2E를 통해 수 없습니다 생각하게하는이 발견했습니다

http://jira.codehaus.org/browse/MNGECLIPSE-599

답변

18

나는 이러한 목표를 달성 할 수있었습니다을하고 모든 것이 잘 작동합니다. 여기에 무엇을 해야할지 :

먼저 Eclipse에 Maven 종속성을 자동으로 인식하고 업데이트하는 데 필요한 M2E Eclipse 플러그인이 필요합니다. 또한 멋진 그래픽 POM 편집기를 제공합니다. 2011 년 말 현재 M2Eclipse 프로젝트는 Sonatype에 의해 Eclipse 재단에 기부되었으며 이제는 간단히 M2E이라고합니다. 그러나, 여전히 이클립스 인디고의 자바 EE 버전과 함께 제공되지 않으며, 과거에 자신의 업데이트 사이트

를 통해 별도로 설치해야합니다, 이클립스와 메이븐 간의 통합이 어느 정도있다 귀찮은. 그러나이 새로운 Eclipse 기반 Maven 통합은 이제 POM 파일에서 사용되는 많은 Maven 플러그인이 있고 특정 플러그인의 특정 목표 만 IDE 환경에서 의미가 있다는 사실을 알고 있습니다. 또한 IDE 내에서 실행할 때 의미가있는 목표는 특별한 구성이 필요할 수 있습니다. 이 기능을 적절하게 처리하기 위해 M2E는 이제 "커넥터"개념을 지원합니다.

M2E는 다양한 모토 (Maven 플러그인 목표)를 호출 할 때 "올바른 기능"을 수행 할 수 있도록하는 특수 커넥터가 긴 목록입니다. Eclipse 내에서 사용 가능한 커넥터 목록을 보려면 환경 설정 대화 상자로 이동하여 Maven-> Dicovery-> Open Catalog를 선택하십시오. 이 커넥터는 프로젝트 가져 오기 중에 {{pom.xml}} 파일에서 감지되면 자동으로 설치됩니다. 그러나이 작업에는 올바른 버전의 M2E Maven 가져 오기 마법사가 필요합니다 (Indigo에는 SR2까지 포함되지 않음).

또한 때때로 이러한 커넥터는 버그가있어서 야간 또는 베타 업데이트 사이트를 사용하여 최신 수정 사항을 적용해야합니다. 이전 버전이나 버그가있는 경우 업그레이드 한 다음 프로젝트를 삭제하고 다시 가져와야합니다. 이러한 이유로 인해 Eclipse에 프로젝트를 가져 오기 전에 모든 M2E 커넥터를 직접 설치해야합니다.

M2E-WTP 커넥터는 Eclipse "서버"용 Eclipse 실행기에서 WAR 오버레이를 작동시키는 데 필요한 커넥터입니다. 이 커넥터는 Maven을 WTP와 통합하는 데 사용됩니다 ... 따라서 WAR 오버레이, 서블릿 컨테이너 설정, Eclipse WTP 구성, 루트 컨텍스트 설정 및 Maven WAR 모듈을 사용할 때 Eclipse 웹 도구를 "그냥 작동"으로 만드는 기타 작업을 처리합니다 Eclipse로 프로젝트로 가져옵니다.

m2e-WTP 커넥터에 대한 업데이트 사이트는 다음과 같습니다 http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/

이 M2E-WTP 사이트를 추가하고 커넥터를 설치합니다. 그러나 M2E 또는 M2E-WTP 커넥터는 오버레이 WAR의 종속성을 최종 WAR에 넣지는 않습니다. 필요한 WAR를 마지막 WAR pom.xml에 추가하여이를 수행해야합니다. 도구가 왜이 작업을 수행하지 않는지 모르겠지만 실행하지 않습니다. ;-)

이 시점에서 {{도움말 -> 업데이트 확인}}을 통해 전체 업데이트를 수행하는 것이 좋습니다. 이 작업이 완료되면 Eclipse 서버를 추가하고 프로젝트 (오버레이 서버가 아닌 일반 서버)를 클릭하고 "서버에서 실행 ..."을 선택할 수 있습니다.

WAR 또는 오버레이 WAR 변경 사항은 서버에 자동으로 게시됩니다. Javascript 변경 사항은 서버를 다시 시작하지 않고 게시됩니다. 브라우저에서 새로 고침을 누르면 실행중인 새 코드가 표시됩니다.

두 번째 업데이트 : M2E에 버그 (https://issues.sonatype.org/browse/MECLIPSEWTP-174)가있어 WEB-INF/lib 디렉토리에 실수로 모든 JAR 파일이 손실 될 수 있습니다. 이 경우 서블릿 애플리케이션은 분명히 시작되지 않습니다. 해결 방법은 서버를 오른쪽 클릭하고 "clean"을 선택하여 서버를 청소하는 것입니다. 작업 디렉토리 만 정리해도 누락 된 JAR은 복원되지 않습니다.

+0

기쁜 답변입니다. 그러나 그것은 나를 위해 작동하지 않습니다. 간단한 프로젝트 A, 간단한 전쟁 프로젝트 B, pom A는 전쟁 B를 의존성으로 선언하지만 실제로 B의 클래스는 사용하지 않습니다.이 경우'mvn install'이 성공적으로 실행됩니다. 오버레이 프로젝트 B가 예상대로 전쟁 A에 추가되었습니다. 하지만 프로젝트 A에서 B의 클래스에 대한 참조를 추가하면 다음 두 가지 문제가 발생합니다. (1) Eclipse에서 B 클래스의 참조를 확인할 수 없습니다. (2)'mvn install' (eclipse 또는 명령 줄에서)이 실패합니다. 코드 A의 모든 부분에 컴파일 오류가 있습니다. B에서 클래스를 참조합니다. – rapt

+1

제안한대로 커넥터를 설치해도 이러한 문제가 해결되지 않았습니다. 내가 여기서 무엇을 놓치고 있니? – rapt

+0

"그러나 M2E 나 M2E-WTP 커넥터 중 어느 것도 오버레이 WAR의 종속성을 최종 WAR에 넣지는 않습니다." 이 정확한 문제를 겪고 있습니다. 다른 작업 방법을 알고 계십니까? 당신이 제공 한 제품이 제 경우에는 작동하지 않습니다. – Hoffmann

관련 문제