¿Cómo puedo usar java.lang.instrument en una aplicación RCP de Eclipse?

Para utilizar las funciones de instrumentación introducidas en JDK 5, puede usar la-javaagent Bandera pasada a la JVM. Esto inyectará una instancia de una clase de Instrumentación en la estáticapremain método. Por ejemplo, en una clase como esta:

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

Con un archivo de manifiesto adecuado, puede ejecutar esto de la siguiente manera:

 java -javaagent:myfiles.jar SomeClass

Esto llama entonces al método principalmain desdeSomeClass. Este enfoque se utiliza en elProyecto Java.SizeOf para adivinar el tamaño aproximado de un objeto Java.

OK, ahora en Eclipse RCPcada paquete tiene su propio cargador de clases. Esto significa que la Instrumentación estática que almacenamos en nuestra MyClass no es visible para una aplicación Eclipse. El javaagent usa un cargador de clases, los paquetes de Eclipse se cargan con otro. Cuando accedemosMyClass.inst desde dentro de un plugin esnull, comoese clase no es la misma clase que la que javaagent cargó y llamópremain en.

Otras pistas sobre una posible solución son:este hilo en la lista de correo rcp. Pero nada concluyente.

¿Hay alguna manera de evitar esto? losEclipse-BuddyPolicy insinuado en el artículo eclipsezone suena bien. Lo intenté:

Eclipse-BuddyPolicy: app

En mis plugins sin suerte. Necesito algo comoEclipse-BuddyPolicy: javaagent. ¿Algunas ideas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta