ここに完全にリストされている単一のソースファイルを含むプロジェクトがあります。
package com.acme.el;
public class ExpressionUtils {
public static Object evaluate() {
new org.apache.commons.el.ExpressionEvaluatorImpl();
return null;
}
}
機能は質問とは無関係です。Gradle を使用してプロジェクトを OSGi バンドルとしてビルドすると、マニフェストに次の命令が含まれます。
Export-Package: com.acme.el;uses:="org.apache.commons.el";version="1.0"
私を当惑させるのは、そのuses
指示です。私がディレクティブを理解しているように、このエクスポートされたパッケージをインポートする他のバンドルに伝播する必要がある他のパッケージへの依存関係を定義することを意図しています - たとえば、私のクラス定義またはメソッド署名がorg.apache.commons.el
パッケージ内のクラスを参照している場合。しかし、このクラスでは、への依存関係はメソッドの本体org.apache.commons.el
に完全に含まれています。これは API で公開されておらず、他のバンドル インポートはメソッドで作成されたインスタンスを取得できませんでした。したがって、依存関係を伝播する必要はありませんよね?com.acme.el
ExpressionEvaluatorImpl
uses
ディレクティブの意味を誤解しましたか、それともここで使用する必要はありませんか?
Eclipse で Gradle プロジェクトとしてクローンおよびインポートできる再現用の最小限のサンプル GitHub リポジトリを作成しました。