2009-03-18 14 views
2

プラグインde.support.helpにplugin.propertiesファイルがあります。 これらのプロパティファイルには、設定ページの文字列が含まれています。フラグメントを使用してプラグイン内のplugin.propertiesファイルをパッチ/マージ

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

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

私はライン

plugin.name = Copyright XYZ 

を含み、プラグインde.support.helpにファイルplugin.propertiesを持っていると私は、ファイルplugin.propertiesを含んfragemtのde.support.help.fragmentを持っています行番号

plugin.name = Copyright ABC 

実行時に「著作権ABC」という文字列が表示されますが、そうではありません。私は長いこと前にJavaクラスで同じことをテストしていました。私は彼が働いていたことを覚えています。フラグメントからのJavaコードが元のプラグインに配置されました。

これを処理する考えはありますか?それとも、断片化の仕組みを誤解していますか?

おかげ

編集:私は期待どおりに動作するプラグインde.support.helpからplugin.propertiesファイルを削除

。フラグメントファイルはプラグインディレクトリにコピーされ、実行時に使用されます。

または私はsomce日食クラスにパッチを適用しなければならないのCan_fragments_be_used_to_patch_a_plug

答えて

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 + '!'; 
     } 
    } 
} 
1

How to Internationalize your Eclipse Plug-In記事

によると、プラグインの断片がその目標プラグインに追加機能を提供します。
実行時に、これらのプラグインの寄与は、すべての依存するフラグメントとともにマージされます。

これらの寄稿には、プロパティおよびHTMLファイルなど、プラグインに関連付けられたリソースのコード寄稿と寄稿が含まれます。

つまり、プラグインは、プラグインのクラスローダーを介してフラグメントのコンテンツにアクセスできます。

Eclipse Platformは、フラグメント内のランタイム要素が元の対象プラグインを拡張する方法でプラグイン・フラグメントをマージします。
ターゲットプラグインは、移動、削除、または変更されません。

プラグインの開発者は、プラグインのJARファイルまたはそのフラグメントのJARファイルからリソースをロードするかどうかを知る必要はありません。


私はクラスローダがde.support.help.fragmentフラグメントの前に最初のde.support.helpプラグインでplugin.nameを検出する疑いがあります。

この時点では、以前に(Eclipse CheckStyle pluginの場合)試行されているため、多くの成功を収めているわけではありません。

+0

は、リソースファイルでは不可能です...最後の解決策を好みます。しかし、Javaクラスでは動作しています。たぶん、私はフラグメントの最初とプラグインよりも見栄えのバンドルローダーを修正することができます。 –

1

あなたは断片と、ファイルの内容を置き換えることはできません - だけでファイルを追加します。

  • あなたがこれと他の顧客固有の情報で拡張ポイントを追加することができます。これは、両方のクラス、プロパティファイル、画像のため、...

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

  • あなたは最初に特別なファイルを探して、今度は一般的なファイルに戻すことができます - Markusが行ったように。
  • 関連する情報とともにプラグインにオプションの依存関係を設定することができます。これは、代替アルゴリズムと.propertiesファイルに属していない他のものの間で選択することができますよう

は、私はそれのように聞こえる

関連する問題