Frage

In meiner Plugin de.support.help sind die plugin.properties Dateien. Diese Eigenschaften Dateien enthalten die Zeichenfolgen für die Einstellungsseite.

Ich mag für verschiedene Kunden dieses Plugin verwenden, aber der Name des Kunden ist in den Eigenschaftsdateien.

Ich möchte mit Hilfe des Eclipse-Fragment Mechanismus, um die Eigenschaften von Dateien patchen. Soweit ich jetzt das Fragment Plugin das coresponding Plugin zur Laufzeit patchen kann.

ich tun, um die Datei plugin.properties in Plugin de.support.help haben, die die Zeile enthält

plugin.name = Copyright XYZ

Und ich tue das fragemt de.support.help.fragment haben, die die Datei plugin.properties mit Zeile enthält

plugin.name = Copyright ABC

Ich gehe davon aus, dass die Zeichenfolge „Urheberrecht ABC“ zur Laufzeit angezeigt wird, ist es aber nicht. Ich hatte vor das gleiche mit Java-Klassen eine lange Zeit getestet, und ich erinnere mich, dass t seine arbeitete. Der Java-Code aus dem Fragmente zu dem ursprünglichen Plugin getätigt.

Haben Sie eine Idee zu handhaben? Oder versteh ich das Fragment Mechanismus?

Danke

EDIT:

Wenn ich die plugin.properties Datei aus dem de.support.help entfernen Plugin es wie erwartet funktioniert. Die Fragment-Datei wird in das Plugin-Verzeichnis kopiert und wird zur Laufzeit verwendet wird.

oder muss ich die somce Eclipse Klasse Can_fragments_be_used_to_patch_a_plug

War es hilfreich?

Lösung 2

Die Lösung i implementiert ist wie

Erster Blick für spezielles Fragment Property-Datei und als für die Standardeigenschaftendatei suchen.

Der Code ist (Bundle Namen wurden geändert)

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

Andere Tipps

Nach Wie Eclipse-Plug-In internationalisieren Artikel

  

Ein Plug-in-Fragment bietet zusätzliche Funktionalität zu seinem Ziel-Plug-in.
  Zur Laufzeit werden diese Plug-in-Beiträge werden zusammen mit allen abhängigen Fragmente fusioniert.

     

Diese Beiträge können Code-Beiträge und Beiträge von Ressourcen gehören mit einem Plug-in verbunden ist, wie Eigentum und HTML-Dateien.

     

Mit anderen Worten, das Plug-in hat Zugriff auf den Inhalt des Fragments über das Plug-In-Classloader.

     

Die Eclipse-Plattform verschmilzt Plug-in-Fragmente in einer Art und Weise, dass die Laufzeitelemente in dem Fragment, das das ursprüngliche Ziel-Plug-in erweitern.
  Die Ziel-Plug-In nicht bewegt, entfernt oder in irgendeiner Weise modifiziert.

     

Da die Ressourcen des Fragments durch den Classloader befinden, die Plug-in-Entwickler keine Notwendigkeit, muss zu wissen, ob Ressourcen aus der Plug-in dem JAR-Datei oder eines seines Fragments JAR-Dateien geladen werden.


Ich vermute, der classloader plugin.name im de.support.help zuerst vor dem de.support.help.fragment Fragmente Plugin erkennen.

An diesem Punkt bin ich nicht sicher, ob es getan werden kann, da sie zuvor versucht worden ist (für den Eclipse-Plugin Check ), ohne viel Erfolg.

Sie können den Inhalt einer Datei mit einem Fragment ersetzen - nur zusätzliche Dateien hinzuzufügen. Dies gilt sowohl für die Klassen, Eigenschaften von Dateien, Bilder, ...

Es gibt mehrere Standardverfahren zur Lösung dieses Problems:

  • Sie können einen Erweiterungspunkt mit diesem und anderen kundenspezifischen Informationen.
  • hinzufügen
  • Sie können zunächst für eine spezielle Datei suchen und diesen Herbst wieder auf den allgemein man - wie von Markus getan
  • .
  • Sie können eine optionale Abhängigkeit von einem Plugin mit den relevanten Informationen haben.

Ich ziehe die letzte Lösung, da dies ermöglicht auch zwischen alternativen Algorithmen und anderen Dingen zu wählen, die in .properties Dateien gehören nicht ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top