Он содержит папку классов, но нет папки jars? Убедитесь, что пути к банкам относятся к корню проекта.
отаю над набором простых агентов Java, чтобы помочь мне (и, надеюсь, другим) устранить неполадки в приложениях Java. Один из агентов, которому я хотел бы создать инструменты - метод JComponent.getToolTipText (), чтобы быстро идентифицировать любой класс графического интерфейса, просто наведя на него курсор мыши.
Вы можете найти код моего трансформатора и остальной части проекта здесь:
Я запускаю свой тестовый графический интерфейс с подключенным агентом следующим образом:
$ java -javaagent:target/jars/sfn-0.1-agent.jar=JComponent -cp lib/jars/bcel-5.2.jar:target/jars/sfn-0.1-test.jar:target/jars/sfn-0.1-agent.jar org.leplus.sfn.test.Main
sfn-0.1-agent.jar содержит класс org.leplus.sfn.transformer.JComponentTransformer. sfn-0.1-test.jar содержит класс org.leplus.sfn.test.Main.
Вот что печатает приложение, когда я запускаю его и налагаю на него мышь:
Loading agent: JComponent Instrumentation ready! Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/leplus/sfn/tracer/ComponentTracer at javax.swing.JComponent.getToolTipText(JComponent.java) at javax.swing.ToolTipManager$insideTimerAction.actionPerformed(ToolTipManager.java:662) ...
Что меня удивляет, так это то, что если я изменю свой преобразователь на вызов любого класса из JRE, это сработает. Но это не работает, когда я вызываю свой собственный класс org.leplus.sfn.tracer.ComponentTracer. Моим первым предположением была проблема пути к классам, но ComponentTracer находится и в пути к классам, и в банке агента. Итак, я потерялся.
Если кто-нибудь из вас увидит, где я что-то упускаю.
Ура,
Том