A mecânica para suportar plug-ins é implementada com o quadro OSGi. Nesta perspectiva, um plug-in é a mesma coisa que um agrupamento OSGi. Os agrupamentos e as suas classes associadas especificam e implementam o processo de carregamento de classes Java, gestão de pré-requisitos e o ciclo de vida do agrupamento. No resto desta abordagem empregaremos os termos plug-in e agrupamento com o mesmo sentido, salvo ao abordar determinada classe no quadro.
A classe Plugin representa um plug-in que está em execução na plataforma. Trata-se de um local conveniente para centralizar os aspectos de ciclo de vida e semântica global de um plug-in. Um plug-in pode implementar funcionalidades especializadas para os aspectos start e stop do seu ciclo de vida. Cada método de ciclo de vida inclui uma referência a um BundleContext que pode facultar informações adicionais.
A parte start do ciclo de vida merece explicação. Já vimos que as informações sobre um plug-in podem ser obtidas junto do ficheiro de manifesto do plug-in sem nunca executar código do plug-in. Regra geral, as acções do utilizador na área de trabalho desencadeiam uma cadeia de eventos que implicam o início de um plug-in. Do ponto de vista de uma implementação, um plug-in nunca é iniciado até que uma classe contida nele precise de ser carregada.
O método start tem sido um lugar conveniente para implementar comportamento de inicialização e registo para um plug-in. Todavia, é importante perceber que o plug-in pode ser iniciado em muitas circunstâncias diferentes. Algo tão simples como a obtenção de um ícone para decorar um objecto pode causar o carregamento de uma classe do plug-in, iniciando assim o mesmo plug-in. Uma inicialização apressada pode fazer com que o código e os dados do plug-in sejam carregados muito antes de ele ser necessário. Por conseguinte, é importante observar as tarefas de inicialização do plug-in e considerar alternativas à inicialização no arranque.
A gestão de ciclo de vida é onde se encontram as terminologias de "bundle" OSGi e de "plug-in" de plataforma. Quando se inicia o plug-in, este recebe uma referência a um BundleContext do qual pode obter informações relacionadas com o plug-in. O BundleContext também pode ser usado para conhecer outros agrupamentos/plug-ins no sistema.
BundleContext.getBundles() pode ser usado para obter uma matriz de todos os agrupamentos no sistema. Podem ser registados ouvintes para BundleEvent de modo ao plug-in saber quando outro agrupamento sofrer uma alteração no seu estado de ciclo de vida. Consulte o javadoc sobre BundleContext e BundleEvent para mais informações.
Nas versões anteriores à 3.0, os registos de plug-in (IPluginRegistry) eram facultados para fornecer informações semelhantes. Por exemplo, podia ser consultado para saber os descritores de plug-in de todos os plug-ins no sistema. Este registo foi abandonado, de modo que se deve utilizar BundleContext para esta finalidade. O registo da plataforma agora é usado exclusivamente para informações sobre extensões e pontos de extensão.
A interface BundleActivator define o comportamento de início e de paragem implementado em Plugin. Embora a classe Plugin seja um lugar conveniente para implementar esta função, o programador de plug-ins dispõe de total liberdade para implementar a interface para BundleActivator numa classe apropriada à finalidade do plug-in. Aliás, o plug-in não precisa de implementar esta interface se não tiver necessidades de gestão de ciclos de vida específicas.
Subjacente a cada plug-in encontra-se um agrupamento OSGi gerido pelo quadro. O Agrupamento é a unidade de modularidade OSGi. Fundamentalmente, um agrupamento é uma recolha de ficheiros (recursos e código) instalados na plataforma. Cada agrupamento tem o seu próprio carregador de classes Java e inclui protocolo para iniciar, parar e desinstalar-se a si próprio. Do ponto de vista da plataforma Eclipse, um Agrupamento é meramente uma classe de implementação. Os programadores de plug-ins não estendem a classe do agrupamento, mas utilizam Plugin ou outras implementações de BundleActivator para representar o plug-in.