2

私のホスト プラグインは、別のプラグインへのオプションの依存関係を宣言しています。ホスト プラグインへのフラグメントのビルドで、オプションで必要なプラグインが Tycho で見つかりません。つまり、オプションの依存関係からのクラスを解決できないため、コンパイル エラーが発生します。

ホスト プラグインのオプション フラグを削除すると、Tycho ビルドは正常に動作します。Maven 3.0.4 と Tycho 0.15.0 を使用しています。

4

2 に答える 2

5

これが本当に Tycho のバグなのか、それとも仕様によるものなのかはわかりません。

これが観察可能な動作の背景です。Tycho は、バンドルをインストールするときに p2 が行うのと同じ方法で依存関係の解決を行うことを目指しています。バンドルへのオプションの依存関係を宣言すると、そのバンドルは p2 によってインストールされません (他のバンドルまたは機能がそのバンドルへのオプションではない依存関係を持っていない限り)。したがって、この規則に従って、Tycho は、依存関係の解決とクラス パスの計算中に、このオプションの依存関係も考慮しません。

ただし、デフォルトの p2 動作から逸脱するためのスイッチがあります (target-platform-configuration構成オプションdependency-resolution/optionalDependencies):

  • requireを指定すると、現在のバンドルのすべてのオプションの依存関係がコンパイル時に必須として扱われます。通常はこれが必要なので、これがデフォルトです
  • ignoreを指定すると、現在のバンドルのすべてのオプションの依存関係がコンパイル時に無視されます。

この特別な処理は、現在のバンドルのオプションの依存関係にのみ適用され、依存チェーン内の他のバンドルには適用されないことに注意してください。ホスト バンドルは現在、他の依存関係と同様に扱われます。フラグメントを構築するときに、ホスト バンドルを特別に扱うことを検討する場合があります。

回避策として次のオプションがあります。

  • また、フラグメントのマニフェストにオプションの依存関係を追加します。これを行う最も簡単な方法は、テキスト エディタを使用することです。厳密に言えば、これは正しいことです。フラグメントは実際には独自の依存関係を宣言し、他の場所の宣言に依存するべきではありません。しかし、PDE ではそうする必要がないため、Tycho がそうする必要があるかどうかは疑問です。
  • build.properties の jars.extra.classpath オプションを使用して、明示的なコンパイル時のみの依存関係をフラグメントに追加します。
于 2012-10-01T14:26:48.657 に答える
-1

回避策を見つけました。ホストプラグインのオプションのプラグインを削除し、Manifest-Editorを介してフラグメントに追加しました。その後、それをホストプラグインに再読み込みし、再びオプションとして宣言しました。(プラグインがホストプラグインですでに宣言されている場合、マニフェストエディターのadd-Buttonを介してフラグメントに表示することはできません)しかし、これはtychoのバグだと思います。オプションの依存関係は、Eclipseの場合と同様に、フラグメントでも使用できる必要があります。

于 2012-10-01T09:10:46.933 に答える