2

私のプラグイン de.support.help には plugin.properties ファイルがあります。これらのプロパティ ファイルには、設定ページの文字列が含まれています。

このプラグインをさまざまな顧客に使用したいのですが、顧客名がプロパティ ファイル内にあります。

Eclipse フラグメント メカニズムを使用して、プロパティ ファイルにパッチを適用したいと考えています。今のところ、フラグメントプラグインは実行時に対応するプラグインにパッチを当てることができます。

plugin de.support.help に plugin.properties ファイルがあり、次の行が含まれています。

plugin.name = Copyright XYZ

そして、ファイル plugin.properties を含む fragemt de.support.help.fragment があります。

plugin.name = Copyright ABC

実行時に文字列「Copyright ABC」が表示されることを期待していますが、そうではありません。私はずっと前にJavaクラスで同じことをテストしましたが、これが機能していたことを覚えています。フラグメントの Java コードが元のプラグインに配置されました。

これを処理するアイデアはありますか?または、フラグメントメカニズムを誤解していますか?

ありがとう

編集:

de.support.help プラグインから plugin.properties ファイルを削除すると、期待どおりに動作します。フラグメント ファイルはプラグイン ディレクトリにコピーされ、実行時に使用されます。

または、somce eclipse クラスCan_fragments_be_used_to_patch_a_plugにパッチを適用する必要がありますか?

4

3 に答える 3

1

私が実装したソリューションは次のようなものです

最初に特別なフラグメント プロパティ ファイルを探し、次にデフォルト プロパティ ファイルを探します。

コードは(バンドル名が変更されました)

public final class FrameworkMessages {
    private static final String BUNDLE_NAME = "de.rts.messages"; //$NON-NLS-1$

    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);

    private static final String BUNDLE_FRAGMENT_NAME = "de.rts.fragment"; //$NON-NLS-1$


    private FrameworkMessages() {
    }

    public static String getString(String key) {
        try {
            return ResourceBundle.getBundle(BUNDLE_FRAGMENT_NAME).getString(key);
        } catch (MissingResourceException e) {
            // Use messages in this plugin when no external fragment files can found
        }

        try {
            return RESOURCE_BUNDLE.getString(key);
        } catch (MissingResourceException e) {
            return '!' + key + '!';
        }
    }

    public static String getString(String pKey, Object[] pArgument) {
        try {
            return MessageFormat.format(RESOURCE_BUNDLE.getString(pKey), pArgument);
        } catch (MissingResourceException e) {
            return '!' + pKey + '!';
        }
    }
}
于 2011-06-28T09:14:48.023 に答える
1

ファイルの内容をフラグメントに置き換えることはできません。ファイルを追加するだけです。これは、クラス、プロパティ ファイル、画像などの両方に当てはまります。

この問題を解決するには、いくつかの標準的な方法があります。

  • この情報およびその他の顧客固有の情報を使用して拡張ポイントを追加できます。
  • Markus が行ったように、最初に特別なファイルを探して、これを一般的なファイルに戻すことができます。
  • 関連情報を含むプラグインへのオプションの依存関係を持つことができます。

これにより、代替アルゴリズムと.propertiesファイルに属さない他のものとの間で選択できるため、最後のソリューションを好みます...

于 2011-06-28T09:27:02.137 に答える