Pergunta

Em meu plugin de.support.help são os arquivos plugin.properties. Esses arquivos de propriedades incluem as cordas para a página de preferências.

Eu quero usar este plugin para clientes diferentes, mas o nome do cliente está dentro dos arquivos de propriedades.

Eu quero corrigir os arquivos de propriedades usando o mecanismo fragmento eclipse. Tanto quanto eu agora o plug-in fragmento pode corrigir o plug-in coresponding no tempo de execução.

Eu tenho as plugin.properties arquivo no plugin de de.support.help que inclui a linha

plugin.name = Copyright XYZ

E eu tenho o de.support.help.fragment fragemt que inclui os plugin.properties arquivo com linha

plugin.name = Copyright ABC

Espero que em tempo de execução a string "de Copyright ABC" é mostrado, mas não é. Eu tinha testado o mesmo com classes Java há muito tempo atrás e me lembro que t seu estava funcionando. O código Java a partir do fragmento foi colocado para o plug-in originais.

Você tem alguma idéia para lidar com isso? Ou eu não compreendem o mecanismo de fragmento?

Graças

EDIT:

Quando eu remover o arquivo plugin.properties do de.support.help plug-in funciona como esperado. O arquivo de fragmento é copiado para o diretório plugin e é usado em tempo de execução.

Ou eu tenho que corrigir a classe somce eclipse Can_fragments_be_used_to_patch_a_plug

Foi útil?

Solução 2

A solução i implementaram é como

Primeiro, olhe para o arquivo de propriedade especial fragmento e do que olhar para o arquivo de propriedade padrão.

O código é (nomes Bundle foram alteradas)

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

Outras dicas

De acordo com a Como Internacionalizar o seu Eclipse Plug-In artigo

Um plug-in fragmento fornece funcionalidade adicional ao seu alvo plug-in.
Durante a execução, estes plug-in contribuições são fundidas juntamente com todos os fragmentos dependentes.

Essas contribuições podem incluir contribuições de código e as contribuições de recursos associados a um plug-in, como arquivos de propriedade e HTML.

Em outras palavras, o plug-in tem acesso ao conteúdo do fragmento através do plug-in do carregador de classe.

A Plataforma Eclipse funde plug-in fragmentos de uma forma que os elementos de tempo de execução no fragmento aumentar o plug-in alvejado originais.
O plug-in-alvo não é movido, removido, ou modificados de qualquer maneira.

Uma vez que os recursos do fragmento estão localizados perto do carregador de classe, o plug-in desenvolvedor não tem necessidade de saber se os recursos são carregados a partir do plug-in do arquivo JAR ou um dos arquivos JAR de seus fragmentos.


Eu suspeito que o carregador de classe detectar plugin.name na de.support.help plugins antes de o fragmento de.support.help.fragment.

Neste ponto, não estou certo de que pode ser feito, uma vez que tem sido tentado antes (para o Eclipse CheckStyle plug-in ), sem muito sucesso.

Você não pode substituir o conteúdo de um arquivo com um fragmento - só adicionar arquivos adicionais. Isto é verdade tanto para as classes, arquivos de propriedades, imagens, ...

Existem vários métodos padrão para resolver este problema:

  • Você pode adicionar um ponto de extensão com este e outras informações específicas do cliente.
  • você pode olhar primeiro para um arquivo especial e esta de volta queda para o geral -. Como feito por Markus
  • você pode ter uma dependência opcional em um plugin com a informação relevante.

Eu prefiro a última solução, pois isso também permite que a de escolher entre algoritmos alternativos e outras coisas que não pertence em arquivos .properties ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top