6

いくつかの機能で構成される RCP アプリケーションを構築しています。

私の RCP アプリケーションは、起動するたびに更新を確認するように構成されています。私の現在の問題は、ビルド時に機能の 1 つを「インストール」して、ユーザーが手動でインストールすることを強制せずに更新の自動チェック中に更新されるようにする必要があることです。システム内の他の機能とは別に更新するには、この機能が必要です。

要約すると、他の機能とは独立して更新され、RCP アプリのユーザーがインストールする必要がないような方法で、機能を RCP アプリにインストールするための優れた自動化された方法を探しています。手動で。

4

3 に答える 3

5

長い検索の後、私は答えを見つけました。ちょっと面倒くさいですが、現時点では何でもするつもりです。私のソリューションは、ビルドした RCP アプリケーションに p2 アプリケーション org.eclipse.equinox.p2.director が含まれているという事実に依存しています。RCP アプリにこのアプリケーションが含まれていない場合は、Director を起動するために別の Eclipse インストールを参照できます。ビルド マシンに Eclipse のインスタンスが置かれるのを避けるために、このようにしました。

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

彼は、ant を使用して p2 director アプリケーションを起動し、構築した RCP アプリケーションに IU をインストールすることを提案しました。

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 アプリケーションを生成する同じプロジェクトの ant ファイルに入れます。Tycho はビルド アーティファクトを「target」というディレクトリに生成するため、上記の 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>

RCP アプリケーションが構築されているプラ​​ットフォームごとに、これらのターゲットをさらにいくつか用意しています。

お役に立てれば。

更新: 2014 年 5 月 8 日。Tobias は、受け入れられた回答を、この回答から、Tycho 0.20.0 に追加された新しい機能を備えた回答に変更して、この動作をより簡単な方法で可能にする必要があることに注意を促しました。 . したがって、新しく受け入れられた回答は、この質問に対する適切な解決策です。

于 2012-05-15T21:15:41.843 に答える
2

一方、Tycho はこのユース ケースを明示的にサポートしています。Tycho 0.20.0から、製品とは別に RCP の機能を Tycho にインストールさせることができます。このようにして、これらの機能を製品とは別に更新 (またはアンインストール) することができます。

機能を個別にインストールするinstallMode="root"には、製品ファイルのそれぞれの機能タグに属性を追加するだけです。例:

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

詳細については、このドキュメント ページを参照してください。

于 2012-07-26T08:01:37.877 に答える
1

ここに文書化されて受け入れられた回答を見つける前に、次の方法でこの問題を解決しようとしましたが失敗しました。

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

現在動作している p2 touchpoint コマンドがあります。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 clean install を実行すると tycho ビルドが失敗します

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

これはmaven / tychoからのエラーメッセージの一部です

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 アプリケーション プラグインに、ビルド時にインストールしたい機能を見つける場所を p2 に伝える何かが欠けていることを示しています。おもう???

于 2012-08-29T18:19:40.717 に答える