私は、1つの個人用プラグイン( )とEclipse Helios(3.6)の他の多数で構成されるcom.example.product
1つの個人用機能()に基づく個人用Eclipse RCP製品( )を持っています。アプリに更新を確認し、必要に応じてp2サイトから更新してもらいたい。ヘッドレスにする必要があります。つまり、ユーザーは更新プロセスで対話しませんが、ダイアログで進行状況が表示される場合があります。com.example.feature
com.example.plugin
更新の実装は、 RCPメールアプリケーションに基づいています。メソッドを少し変更してP2Util.checkForUpdates
ロギングを含め、そこで何がうまくいかないかを確認できるようにしました。
static IStatus checkForUpdates(IProvisioningAgent agent,
IProgressMonitor monitor) throws OperationCanceledException,
InvocationTargetException {
ProvisioningSession session = new ProvisioningSession(agent);
UpdateOperation operation = new UpdateOperation(session);
SubMonitor sub = SubMonitor.convert(monitor,
"Checking for application updates...", 200);
IStatus status = operation.resolveModal(sub.newChild(100));
if (status.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) {
return status;
}
if (status.getSeverity() == IStatus.CANCEL)
throw new OperationCanceledException();
if (status.getSeverity() != IStatus.ERROR) {
try {
logger.info( "Status is " + status );
Update[] updates = operation.getPossibleUpdates();
for( Update u : updates){
logger.info( "Update is " + u );
}
ProvisioningJob job = operation.getProvisioningJob(null);
if( job == null ){
logger.error( "Provisioning Job is null" );
}
status = job.runModal(sub.newChild(100));
if (status.getSeverity() == IStatus.CANCEL) {
throw new OperationCanceledException();
}
} catch ( Exception e ){
logger.error( "Exception while trying to get updates", e);
}
}
return status;
}
機能にp2.inf
ファイルと同じレベルのexample.product
ファイルがあります。を含む:
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository":
instructions.configure=\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:0,location:file${#58}/C${#58}/workspace/updatesite/);\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:1,location:file${#58}/C${#58}/workspace/updatesite/);
プラグイン、機能、製品IDを1.0.0に設定して製品をビルドします。製品エクスポートウィザードを使用して、Eclipseから製品をエクスポートして実行できます。私はこれをするときにカチカチ音をたてるgenerate metadata repository
。
Create an Update Site Project
FeatureManfiestEditorのオプションを使用して更新サイトを作成します。`com.example.feature'を追加してビルドします。それが機能するかどうかを確認するために、EclipseIDEの[新しいソフトウェアのインストール]オプションを使用して参照してみてください。そこで機能を確認できます。
3つのIDすべてを1.0.1に変更して更新サイトを構築します。アプリを起動すると、インストールする更新がない、ログにエラーがない、と表示されます。
更新サイトから更新されない理由はわかりませんが、頭に浮かんだのは次のとおりです。
1) p2.infファイルにさらに情報が必要な場合がありますが、名前空間、名前、範囲など、何が必要かわかりませんが、適切な実用的な例を見つけることができません。
2)このcheckForUpdates
方法では、更新されるインストール可能なユニットを変更するために、プロファイルを使用して何かを行う必要がある場合があります。繰り返しになりますが、これを示唆するコメントのみが見つかり、その方法を示すサンプルコードは見つかりませんでした。
ここでは、ヒントやアイデアを高く評価しています。これは多くの時間を費やしています。