Pergunta

Estou tentando criar um plug -in simples no Eclipse. Quando executo o aplicativo, vejo esse erro no arquivo de log:

org.osgi.framework.bundleException: o ativador para pacote org.xyActivator para pacote org.xy é inválido.

Você tem alguma ideia sobre esse erro?

Foi útil?

Solução

Verifique o seu build.properties seção

Se não especificar corretamente o que deveria ser no resultado binário final, não funcionará. Verifique se os arquivos .class são onde o manifesto.mf diz que serão.


a partir de Eclipsezona, outro motivo para esta mensagem de erro:

Se você vir uma mensagem no log como

 The activator org.example.FooActivator for bundle org.example.foo is invalid 

, então isso geralmente significa que houve um ClassNotFoundException Tentando carregar a classe em primeiro lugar, antes mesmo de chegar ao método START ().


Penguru Adicionar:

O erro ocorre quando tento criar um novo objeto a partir de qualquer outra classe no construtor da classe ativadora. Não é legal criar um objeto no plug -in do ativador?

  • Se a classe se de outro plug -in que ainda não tenha sido "ativada", esse pode ser o seu problema.
  • Se essa classe não for encontrada, isso também invalidaria o ativador do seu plug -in.

Conselho básico: você pode estar melhor com suas inicializações feitas no start() método do Activator em vez de seu construtor.

Outras dicas

Também enfrentei o mesmo problema ao importar plugins de diferentes espaço de trabalho. Basicamente, é o pacote de classe onde a estrutura procura enquanto carrega as classes. Ao importar para um espaço de trabalho diferente, altere o caminho da classe para apontar para o local apropriado, ou seja, onde o arquivo de classe está presente.

Depois de modificar o caminho de classe, tente limpar, reconstruir e re-executar. Deve funcionar .. esperança ..

Se você mover o espaço de trabalho do Eclipse para um novo caminho, use o projeto-> Limpe antes da criação do plug-in, ou você enfrentará esse problema.

Ok, eu odeio ser o capitão óbvio aqui, mas já cometi esse erro antes. Isso também pode acontecer quando você esquece de estender o Bundleactivator.

Passei algum tempo com esse problema. Finalmente, notei que os ClassNotFoundExceptions não estavam alinhados com o meu código, eles vinham de pacotes errados (antigos). Eu verifiquei se havia outro plugin que estava mexendo com minhas depuras/exportações e, de fato, havia, meu próprio plugin!

Portanto, uma correção simples de tentar se você estiver enfrentando isso e os CNFE não estão alinhados com seu código:

  • Vá para "Instalar novo software"
  • Clique em "já instalado"
  • Remova todas as instâncias do seu pacote/plug -in e reinicie

Provavelmente isso foi causado porque eu mudei o ID do plug -in, fazendo com que o Eclipse o tratasse como um novo plug -in.

Outro bom site para dar uma olhada se você estiver ficando frustrado e preso: http://www.eclipsezone.com/eclipse/forums/t99010.html

No meu caso, houve essa mensagem "ativador ..invalid", mas nas próximas exceções, houve exceções de classe em um pacote em que eu não mudei algo ..

Guu (postou uma solução também) é meu herói, depois aumentando

Bundle-ManifestVersion: 2

para

Bundle-ManifestVersion: 3

tudo funciona :)

Eu recebi a mesma exceção. O problema subjacente era uma ClassCastException. Meu pacote requer org.osgi.core 4.3, enquanto o Launcher Equinox usa 4.2.

Atenciosamente Roland

Isso também pode acontecer se você nomear um pacote após um pacote em outro pacote.

Então:

  • se você tem Bundle A que contém pacote org.my.package.name.function,
  • e você cria bundle B com nome org.my.package.name.function,
    • => Então o sistema pode procurar o ativador lá e não encontrar nenhum.

Encontrei o motivo do erro. O erro ocorre quando tento criar um novo objeto a partir de qualquer outra classe no construtor da classe ativadora. Não é legal criar um objeto no ativador do plug -in?

No meu caso, essa exceção foi devido à incapacidade do Eclipse Class Class Loader para resolver e carregar todas as classes dependendo de outros plugins em tempo. Eu não sou o Eclipse Super-Guru, então talvez tenha sido minha culpa.

No entanto, foi corrigido desativando o carregamento preguiçoso do plug -in. Em gui Visão geral guia de MANIFEST.MF Editor Uncheck Ative este plug-in quando uma de suas classes for carregada. Ou diretamente em MANIFEST.MF Excluir linha

Bundle-ActivationPolicy: lazy

Outro capitão óbvio: se você alterar os caminhos dos seus arquivos de origem (por exemplo, SRC/para SRC/Main/Java), mas esqueça de atualizar o Build.Properties, a compilação sempre terá sucesso, mas seu plug -in nunca funcionará.

Eu tive o mesmo erro, no meu caso, criei meu próprio construtor com parâmetros. Mas eu não forneci um construtor padrão. Então, depois de remover meu construtor e inicializar tudo dentro do método START (), ele funcionou como charme.

Eu também encontrei o mesmo erro. O ativador xx para o pacote xx é inválido e a classeNotFoundException. Eu verifiquei os plugins diretório e não consegui encontrar a classe necessária.

- Como não há arquivo JAR contendo a classe necessária, existe apenas o diretório correspondente. Por exemplo, não há com.hh.jar, mas apenas diretório com.hh.

Portanto, deve haver algo errado em criar o com.hh.jar.

Se com.hh.jar referência a outros plugins, verifique também.

Eu resolvi o problema editando manifest.mf. Abra-o por editor de manifesto de plug-in, na guia Runtime, adicione pacotes necessários em "pacotes exportados". e no "Path", adicione as bibliotecas necessárias e, "". (Diretório atual, importante)

Eu também encontrei esse ISue quando 'Bundle-Uk' Limping Jar Arquivos. Se algumas dependências não forem resolvidas ou os frascos dependeram de uma versão Java mais alta do que a que você está usando, o ativador não começará, dando a exceção acima. A maneira rápida de descobrir se esse é o problema é remover os frascos do caminho de classe (guia de tempo de execução do manifesto) e verificar se o ativador será executado corretamente.

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