2012-04-27 4 views
6

몇 가지 기능으로 구성된 RCP 응용 프로그램을 구축 중입니다.Eclipse RCP 앱을 빌드하여 기능을 자동으로 업데이트하려면 어떻게해야합니까?

내 RCP 응용 프로그램은 시작할 때마다 업데이트를 확인하도록 구성됩니다. 나의 현재 문제는 필자가 필자의 기능 중 하나를 빌드시에 '설치'해야 사용자가 수동으로 설치하지 않고 업데이트를 자동으로 확인하는 동안 업데이트되도록하는 것입니다. 이 기능은 시스템의 다른 기능과 독립적으로 업데이트해야합니다.

요약하면, 필자는 기능을 다른 기능과 독립적으로 업데이트하고 RCP 사용자를 필요로하지 않는 방식으로 기능을 RCP 앱에 설치하는 멋진 자동화 된 방법을 찾고 있습니다. 앱을 수동으로 설치하십시오.

답변

2

한편 Tycho는이 사용 사례를 명시 적으로 지원합니다. Tycho 0.20.0으로 시작하여 Tycho가 RCP의 기능을 제품과 별도로 설치하도록 할 수 있습니다. 이러한 방식으로, 이러한 기능은 제품과 독립적으로 업데이트 (또는 설치 제거) 될 수 있습니다.

기능을 독립적으로 설치하려면 제품 파일의 해당 기능 태그에 installMode="root" 속성을 추가하기 만하면됩니다. 예 :

<features> 
    <feature id="org.eclipse.platform"/> 
    <feature id="updatable.feature" installMode="root"/> 
</features> 

자세한 내용은 this documentation page을 참조하십시오.내가 여기 문서화하고 받아 들여 답을 발견하기 전에

+0

이 .product 파일은 어디에서 찾을 수 있습니까? – Wearybands

5

긴 검색 후 답변을 찾았습니다. 그것은 일종의 괴롭힘이지만, 나는이 시점에서 무엇이든 할 의향이 있습니다. 내 솔루션은 내 내장 RCP 응용 프로그램에 p2 응용 프로그램 org.eclipse.equinox.p2.director가 포함되어 있다는 사실에 달려 있습니다. RCP 응용 프로그램에이 응용 프로그램이 포함되어 있지 않으면 Director를 시작하기 위해 다른 Eclipse 설치를 참조 할 수 있습니다. 이클립스 인스턴스를 빌드 머신에 두는 것을 피하기 위해이 방법을 사용했다.

필자는 p2-dev 메일 링리스트를 사용했고 Paul Webster가 내 질문에 답변했습니다. (Thanks Paul)

그는 내장 된 RCP 응용 프로그램에 IU를 설치하기 위해 ant를 사용하여 p2 디렉터 응용 프로그램을 시작하도록 제안했습니다.

여기에 여기에 내가 생각 해낸 개미 대상 년대 P2-dev에 메일 링리스트 http://dev.eclipse.org/mhonarc/lists/p2-dev/msg04735.html

에 그의 대답이다.

<target name="install_IU"> 
    <path id="launcher.paths"> 
    <fileset 
     dir="${app.dir}" 
     includes="plugins/org.eclipse.equinox.launcher_*" /> 
    </path> 
    <property 
     name="launcherPath" 
     refid="launcher.paths" /> 
    <echo>-installIU ${iu.id} </echo> 
    <java 
     jar="${launcherPath}" 
     failonerror="false" 
     dir="${app.dir}" 
     timeout="900000" 
     fork="true" 
     output="${basedir}/director.log" 
     resultproperty="directorcode"> 
     <arg line="-application org.eclipse.equinox.p2.director" /> 
     <arg line="-noSplash" /> 
     <arg line="-installIUs ${iu.id}" /> 
     <arg line="-repository ${iu.repo}" /> 
     <arg line="-destination ${app.dir}" /> 
     <arg line="-bundlepool ${app.dir}" /> 
    </java> 

    <zip destfile="${app.zip}" 
    basedir="${app.dir}"/> 
</target> 

이 파일을 Tycho를 통해 Eclipse RCP 응용 프로그램을 만드는 프로젝트와 동일한 프로젝트에 넣습니다. 티코는

<target name="modify_x86"> 
    <antcall target="install_IU"> 
    <param name="iu.id" value="com.mydomain.the.feature.i.want.to.install.feature.feature.group"/> 
    <param name="iu.repo" value="http://mydomain.com/thep2repository/where/i/deploy/the/feature/to/install"/> 
    <param name="app.dir" value="${basedir}/target/products/com.mydomain.myRCPapplication/win32/win32/x86"/> 
    <param name="app.zip" value="${basedir}/target/products/com.mydomain.myRCPapplication-win32.win32.x86.zip"/> 
    </antcall> 
</target> 

내가 내 RCP 응용 프로그램이 내장되어 각 플랫폼에 이러한 목표의 몇 가지 더있다 ... 같이 위의 개미 대상에 내 매개 변수 때문에 "대상"이라는 디렉토리에 내 빌드 산출물을 생산 에 대한.

희망이 도움이됩니다.

업데이트 : 2014 년 5 월 8 일. Tobias는 내가 받아 들인 답변을 Tycho 0.20.0에 추가 된 새로운 기능이있는 것으로 바꿔야한다고 내 관심을 끌었습니다. 훨씬 더 간단한 패션. 따라서 새로운 대답이 지금이 문제에 대한 적절한 해결책입니다.

+1

이것이 이유입니다. 먼저 Tycho가 (내장 된) p2 디렉터를 내부적으로 호출하고 제품 IU를 설치합니다. 그런 다음 디렉터에게 다시 전화를 걸어 기능 IU를 설치합니다. 그 결과 설치에는 두 개의 "루트 IU"(즉 설치 지점이 진입 점)가 있습니다. 업데이트 확인은 최신 버전의 각 루트 IU를 검사하므로 구성된 리포지토리에서 사용 가능한 최신 버전이있을 때 해당 기능이 업데이트됩니다. – oberlies

+0

좋은 소식이 있습니다. Tycho가 [이 사용 사례를 명시 적으로 지원합니다.] (http://wiki.eclipse.org/Tycho/Release_Notes/0.20)이므로 pom을 약 1 마일 정도 없앨 수 있습니다. xml 구성 ;-) – oberlies

+0

감사합니다. 위의 오래된 ant 코드를 제거하고 새로운 기능을 사용했습니다. 저는 버그에 18 명의 유권자 중 한 명이었습니다. https://bugs.eclipse.org/bugs/show_bug.cgi?id=361722 – twindham

1

, 나는 시도하고 다음과 같은 방법으로이 문제를 해결하지 못했습니다

나는 제품 정의의 기능을 퍼팅 시도합니다. 이 기능은 성공적으로 설치되었지만 RCP 응용 프로그램의 다른 기능과 독립적으로 업데이트 할 수 있습니다.

현재 작동중인 p2 터치 포인트 명령이 있습니다. p2.inf 파일을 사용하여 RCP 응용 프로그램의 사용 가능한 업데이트 사이트에 저장소를 추가합니다. 내가이 같은 줄을 추가하기 위해 노력했습니다

instructions.configure=\ 
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//myUpdateSsite/myFeature,type:0,name:My Feature Name,enabled:true);\ 
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//myUpdateSsite/myFeature,type:1,name:My Feature Name,enabled:true);\\ 

그 기능이 설치 얻을 ...이처럼 보이지만 내가 MVN 깨끗한

다음
instructions.configure=\ 
org.eclipse.equinox.p2.touchpoint.eclipse.installFeature(feature:My Feature Name,featureId:com.my.domain.my.feature.id,version:1.0.0); 

일부의 설치 실행하면 내 티코 빌드가 실패 받는다는/티코에서 오류 메시지의 내 직감이 나에게 말한다

An error occurred while configuring the installed items session context was: 
(profile=DefaultProfile, phase=org.eclipse.equinox.internal.p2.engine.phases.Configure, operand=null --> 
[R]{my.domain.my.rcp.product.plugin 1.1.6.20120427-1346}, 
action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.InstallFeatureAction). 
Installable unit contains no artifacts: [R]my.domain.my.rcp.product.plugin 1.1.6.20120427-1346. 

이 오류 메시지가 내 RCP 응용 프로그램 플러그인가 나는 WA 기능을 찾을 P2를 말할 것이다 뭔가를 누락되었음을 말하는 것을 빌드시에 설치할 NT. 나는 생각한다 ???

+0

좋은 노력! 여전히, 'installFeature' 터치 포인트는 여기서 작동하지 않습니다. 터치 포인트는 p2의 실제 (즉 파일 I/O) 레이어입니다. 목표를 달성하려면 설치의 상위 수준 p2 메타 데이터를 변경해야합니다. – oberlies

+0

글쎄, 나는 위의 예제가 작동하지 않는다는 데 동의한다. 다른 사람들이 웹 검색 중에 찾을 수 있도록 여기에 남겨두고 있습니다. p2가 여기서 무엇을하는지에 대해 더 많이 배우고 싶습니다. IMHO 이후 p2로 작업하는 방법을 알아내는 것은 어려웠습니다. 매우 직관적이지는 않습니다. 나는 더 많은 것을 배우고 싶다. 그래서, "설치의 고수준 p2 메타 데이터에 변화가 필요하다"는 것은 무엇을 의미 하는가? OBTW, Paul Webster가 저에게 준 답변은 저를 위해 일하고 있습니다. 그러므로 나는 최근 다른 가능한 해결책을 추구하지 않았습니다. – twindham

+0

[작업 솔루션] (http://stackoverflow.com/a/10608982/1523648)에 대한 설명에 몇 가지 추가 설명이 추가되었습니다. – oberlies