2013-07-15 1 views
1

Eclipse RCP 프로젝트에서 작업하고 있습니다. 현재 dependencies 플러그인 프로젝트를 만들고 모든 jars 라이브러리를 해당 프로젝트에 넣고 모든 패키지를 내 보냅니다. 이 방법은 거대한 repo를 줄 것이므로 우리는 Tycho/Maven을 사용하여 우리를위한 의존성을 파악하게합니다.Tycho/Maven을 사용하여 Eclipse RCP에서 jars 종속성을 제거하는 가장 좋은 방법은 무엇입니까?

첫 번째 방법은 dependenciec 프로젝트를 제거하고 을 사용하여 기존 jars 라이브러리를 p2 형식 repo로 변환하는 것입니다. p2 repos에서 모든 라이브러리를 설치하고 각각 MANIFEST.MFRequire-Bundle 섹션에 필수 번들을 추가하십시오. 이것은 이 Require-Bundle에있는 모든 프로젝트에서 수동으로 해당 번들 이름으로 바꾸어야하기 때문에 조금 지루합니다. 그리고 결국, Tycho를 사용하여 프로젝트를 성공적으로 실행할 수 있었지만 Eclipse에서는 java.lan.NoClassDefFoundError: Could not initialize class X이되었습니다. 티코가 그들과 이클립스의 일부에 의존 내가 몇 가지 구성 파일이 생각

는 나머지에 따라 달라집니다,하지만 난 그게 뭔지 모르겠어요.

두 번째 방법은 dependencies 프로젝트의 모든 병을 제거하지만 Require-Bundle 또는 Import-Package에서 그 (것)들을 추가하고있다. 그러나 Export-Package 섹션에서 이클립스는이 패키지가 존재하지 않는다고 불평 할 것이므로 둘 다 작동하지 않을 것이다. 따라서 다른 프로젝트는이 dependencies 프로젝트에 의존하므로 프로젝트가 필요한 패키지를 찾지 못해 Eclipse에서 더 많은 오류가 발생합니다.

누구든지이 문제를 해결하기위한 최선의 방법을 알고 있습니까?


업데이트 : 기본적으로 첫 번째 방법을 사용하는 대신 Require-Bundle의 각 프로젝트에 Import-Package에 종속성을 추가하고있어

. 이렇게하면 특정 번들 버전을 지정할 필요가 없어집니다. 단, 동일한 번들 버전을 지정해야합니다. 단, 동일한 API를 제공하고 호환되는 경우 응용 프로그램이 작동합니다. 그래서 매일 개인 p2 저장소를 업데이트하므로 각 프로젝트마다 MANIFEST.MF을 변경할 필요가 없습니다.

유일한 MANIFEST.MF 내가 수동으로 의존성을 추가해야합니다 Require-Bundle은 우리 자신이 개발 한 라이브러리입니다. 이를 사용하지 않으면 Tycho는 개인 P2 저장소에서 필요한 종속성을 가져 오지 않습니다. 여전히 NoClassDefFoundError을 얻는다면, Run-> Run Configuration ..-> plug-ins에서 모든 플러그인을 추가해보십시오. 도움이 될 것입니다.

+0

모든 종속 항아리가있는 프로젝트를 만드는 목적은 무엇입니까? 대신 feature.xml을 사용할 수 없습니까? – nbz

+0

당신이 묘사하는 것은 아마도 할 수 있습니다 -하지만 당신은 뭔가 잘못하고 있습니다. 그러나 당신은 우리가 단지 짐작할 수있을 정도로 애매합니다. 세부 정보를 추가하십시오. 매니지드 – oberlies

답변

0

확실히 메가 플러그인을 사용하여 접근 방식 1을 적용하지 마십시오. 여기에 대한 관련 논의는있다 : Handling non-OSGi dependencies when integrating Maven, Tycho and Eclipse

원칙적으로는 필요-번들 대신 가져 오기 - 패키지를 사용합니다.

는 번들이 수출 패키지 섹션 이클립스에 나타납니다 활용하려면 다음
  • 가 아닌 이클립스 (받는다는 라이브러리) 경우

    다음 이클립스 런타임 섹션에서 라이브러리 프로젝트를 빌드하고 참조합니다.
  • 이클립스 종속성이있는 경우 작업 영역 또는 대상 플랫폼에 있어야합니다. 당신이 대상 플랫폼을 정의하는

는 더 일반적으로, 그것은 도움이 될 수 있습니다. 로컬로 생성 된 모든 플러그인을 로컬 p2 저장소에 구축/배포 할 수 있습니다 (http://www.sonatype.org/nexus/ 참조). 그런 다음 해당 p2 사이트를 대상 플랫폼에 추가하십시오.