Jak mogę użyć java.lang.instrument w aplikacji Eclipse RCP?

Aby korzystać z funkcji instrumentacji wprowadzonych w JDK 5, możesz użyć-javaagent flaga przekazana do JVM. Spowoduje to wstrzyknięcie instancji klasy Instrumentation do statycznegopremain metoda. Na przykład w klasie takiej jak ta:

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

Za pomocą odpowiedniego pliku manifestu możesz go uruchomić w następujący sposób:

 java -javaagent:myfiles.jar SomeClass

To wywołuje wtedy metodę premainmain zSomeClass. To podejście jest stosowane wProjekt Java.SizeOf odgadnąć przybliżony rozmiar obiektu Java.

OK, teraz w Eclipse RCPkażdy pakiet ma swój własny program ładujący klasy. Oznacza to, że statyczna instrumentacja, którą przechowywaliśmy w MyClass, nie jest widoczna dla aplikacji Eclipse. Javaagent używa jednego programu ładującego klasy, pakiety Eclipse są ładowane innym. Kiedy uzyskamy dostępMyClass.inst z wnętrza wtyczki jestnull, tak jakże klasa nie jest tą samą klasą, co javaagent załadowany i wywołanypremain na.

Inne wskazówki dotyczące możliwego rozwiązania toten wątek na liście dyskusyjnej rcp. Ale nic rozstrzygającego.

Czy jest jakiś sposób na obejście tego? TheEclipse-BuddyPolicy podpowiedzi w artykule eclipsezone brzmią dobrze. Próbowałem:

Eclipse-BuddyPolicy: app

w moich wtyczkach bez szczęścia. Potrzebuję czegoś takiegoEclipse-BuddyPolicy: javaagent. Jakieś pomysły?

questionAnswers(1)

yourAnswerToTheQuestion