2012-04-27 13 views
6

私はいくつかの機能で構成されるRCPアプリケーションを構築しています。Eclipse RCPアプリケーションをビルドして、その機能を自動的に更新できるようにするにはどうすればよいですか?

私のRCPアプリケーションは、起動するたびにアップデートをチェックするように設定されています。私の現在の問題は、ビルド時に自分のフィーチャーの1つを「インストール済み」にする必要があるため、この自動チェック中にユーザーが手動でインストールする必要がなくなります。この機能は、システムの他の機能とは別に更新する必要があります。

これを要約すると、フィーチャーを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

この製品ファイルはどこにありますか? – Wearybands

5

長い検索の後、私は答えを見つけました。それは一種の泥だらけですが、私はこの時点で何かをしたいと思います。私の解決策は、私の構築したRCPアプリケーションがp2アプリケーションorg.eclipse.equinox.p2.directorを含んでいるという事実に依存しています。あなたのRCPアプリケーションにこのアプリケーションが含まれていない場合は、Directorを起動するために別のEclipseインストールを参照することができます。私はビルドマシンにEclipseのインスタンスを置くことを避けるために、このようにしました。

私はp2-devメーリングリストを使いました。Paul Websterが私の質問に答えました。 (ありがとうポール)

彼は私の構築したRCPアプリケーションにIUをインストールするために、p2ディレクターアプリケーションを起動するantを使用することを提案しました。ここで

はP2-devメーリングリストへの彼の答えはここに私が思い付いたAntターゲットだ 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> 

これは、私のEclipse RCPアプリケーションをTycho経由で作成するのと同じプロジェクトのantファイルに入れています。ティコは私のRCPアプリケーションが構築されている各プラットフォームのために、私はこれらの目標のいくつかのより多くを持っている...このような外観上のAntターゲットへの私のパラメータので、「ターゲット」というディレクトリに

<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> 

を私のビルド成果物を生成しますために。

これが役に立ちます。

更新日:2014年5月8日Tobiasは私がこの回答を、Tycho 0.20.0に追加された新しい機能を持つものに変更する必要があることに私の注目を集めました。はるかにシンプルなファッション。だから、新しい受け入れられた答えは今この問題のための適切な解決策です。

+1

これがこの理由です:まず、Tychoは内部的に(組み込みの)p2ディレクタを呼び出し、製品IUをインストールします。その後、ディレクタに再度電話をかけ、IU機能をインストールします。結果として得られるインストールは、2つの「ルートIU」(すなわち、インストールにまたがるエントリポイント)を有する。更新プログラムのチェックでは、各ルートIUの新しいバージョンがチェックされるため、構成されたリポジトリで新しいバージョンが利用可能になったときに更新されます。 – oberlies

+0

私は良いニュースを持っています:Tychoは[このユースケースの明示的なサポート](http://wiki.eclipse.org/Tycho/Release_Notes/0.20)を持っていますので、おそらくpomの約1マイルを取り除くことができます。 xmlの設定;-) – oberlies

+0

ありがとうございました、上記の古いantコードを削除して、新しい機能を利用しました。私はバグの18人の投票者の1人でした:) https://bugs.eclipse.org/bugs/show_bug.cgi?id=361722 – twindham

1

私はここに文書化され、受け入れられて答えを見つけた前に、私が試したし、次の方法でこの問題を解決するために失敗しました:

私は、製品定義に機能を入れてみました。この機能は正常にインストールされていますが、RCPアプリケーションの他の機能とは独立して更新できるようになります。

私は現在動作しているp2タッチポイントコマンドを持っています。これは、p2.infファイルを使用して、RCPアプリケーション内の利用可能な更新サイトにリポジトリを追加します。それはここではいくつかのだ、私は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); 

をインストールし、私はその機能がインストールされて得るために、このような行を追加しようとしましたが、私のティコのビルドが失敗した

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);\\ 

...このようになります私の直感は、このエラーメッセージは、私のRCPアプリケーションのプラグインがI WAという特徴を見つけるためにP2を教えてくれる何かが欠落していることを言っていることを私に語ったのmaven /ティコ

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. 

からのエラー・メッセージのビルド時にはインストールしないでください。おもう???

+0

良い努力!それでも、「installFeature」タッチポイントはここでは機能しません。タッチポイントは、p2の物理的な(すなわちファイルI/O)レイヤーです。あなたの目標を達成するためには、インストールの上位レベルのp2メタデータを変更する必要があります。 – oberlies

+0

さて、上記の例はうまくいかないと私は同意します。私はそれらをここに残して、同じことで苦労している他の人たちがウェブ検索中にそれを見つけることができるようにします。私は本当にp2がここで何をしているのかをもっと学びたいと思っています。 IMHO以来p2を使って作業する方法を理解することは難しく、直感的ではありません。私はもっ​​と学びたいと思っています...だから、「あなたはインストールの高水準p2メタデータに変更が必要です」という意味は何ですか? OBTW、ポールウェブスターが私に与えた答えは、私のために働いているので、私は最近他の解決策を追求していません。 – twindham

+0

コメントに[working solution](http://stackoverflow.com/a/10608982/1523648)の説明を追加しました。 – oberlies

関連する問題