Как я могу использовать java.lang.instrument в приложении Eclipse RCP?
Чтобы использовать инструментальные функции, представленные в JDK 5, вы можете использовать-javaagent
флаг передан в JVM. Это вставит экземпляр класса Instrumentation в статическийpremain
метод. Например, в таком классе:
public class MyClass {
public static Instrumentation inst;
public static void premain(String options, Instrumentation inst) {
MyClass.inst = inst;
}
}
С соответствующим файлом манифеста вы можете выполнить это следующим образом:
java -javaagent:myfiles.jar SomeClass
Это вызывает метод premain, тоmain
изSomeClass
, Этот подход используется вJava.SizeOf Project угадать приблизительный размер объекта Java.
Хорошо, теперь в Eclipse RCPу каждого пакета есть свой загрузчик классов, Это означает, что статический инструментарий, который мы сохранили в нашем MyClass, невидим для приложения Eclipse. Javaagent использует один загрузчик классов, а пакеты Eclipse загружаются с другим. Когда мы получаем доступMyClass.inst
из плагина этоnull
, какэто класс не совпадает с классом, который загружен и вызван javaagentpremain
на.
Другие подсказки относительно возможного решения:эта тема в списке рассылки rcp. Но ничего неопровержимого.
Есть ли способ обойти это?Eclipse-BuddyPolicy
Намек на то, что в статье Eclipsezone звучит хорошо. Я пытался:
Eclipse-BuddyPolicy: app
в моих плагинах без удачи. Мне нужно что-то вродеEclipse-BuddyPolicy: javaagent
, Есть идеи?