Como posso usar java.lang.instrument em um aplicativo Eclipse RCP?

Para usar os recursos de instrumentação introduzidos no JDK 5, você pode usar o-javaagent sinalizador passado para a JVM. Isso irá injetar uma instância de uma classe de instrumentação napremain método. Por exemplo, em uma classe como esta:

public class MyClass {
    public static Instrumentation inst;
    public static void premain(String options, Instrumentation inst) {
        MyClass.inst = inst;
    }
}

Com um arquivo de manifesto apropriado, você pode executar isso da seguinte maneira:

 java -javaagent:myfiles.jar SomeClass

Isso chama o método premain entãomain deSomeClass. Essa abordagem é usada noProjeto Java.SizeOf para adivinhar o tamanho aproximado de um objeto Java.

OK, agora no Eclipse RCPcada pacote tem seu próprio classloader. Isso significa que a Instrumentação estática que armazenamos em nosso MyClass não é visível para um aplicativo Eclipse. O javaagent usa um carregador de classes, os pacotes do Eclipse são carregados com outro. Quando nós acessamosMyClass.inst de dentro de um plugin énull, Comonaquela classe não é a mesma classe que o javaagent carregado e chamadopremain em.

Outras pistas sobre uma possível solução sãoesta discussão na lista de discussão do rcp. Mas nada conclusivo.

Existe alguma maneira de contornar isso? oEclipse-BuddyPolicy insinuado no artigo eclipsezone soa bem. Eu tentei:

Eclipse-BuddyPolicy: app

nos meus plugins sem sorte. Preciso de algo comoEclipse-BuddyPolicy: javaagent. Alguma ideia?

questionAnswers(1)

yourAnswerToTheQuestion