Java NoClassDefFoundError ao chamar a própria classe do método instrumentado

Estou trabalhando em um kit de agentes Java simples para me ajudar (e espero que outros) a solucionar problemas de aplicativos Java. Um dos agentes que eu gostaria de criar instrumentos é o método JComponent.getToolTipText () para identificar rapidamente qualquer classe da GUI, passando o cursor do mouse sobre ela.

Você pode encontrar o código do meu transformador e o restante do projeto aqui:

http://sfn.cvs.sourceforge.net/viewvc/sfn/core/src/main/java/org/leplus/sfn/transformer/JComponentTransformer.java?view=markup

Eu inicio minha GUI de teste com o agente anexado da seguinte maneira:

$ 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 contém a classe org.leplus.sfn.transformer.JComponentTransformer. sfn-0.1-test.jar contém a classe org.leplus.sfn.test.Main.

Aqui está o que o aplicativo imprime quando inicio e coloco o mouse sobre ele:

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)
...

O que é surpreendente para mim é que, se eu mudar meu transformador para chamar qualquer classe do JRE, ele funcionará. Mas isso não funciona quando eu chamo minha própria classe org.leplus.sfn.tracer.ComponentTracer. Meu primeiro palpite foi um problema de caminho de classe, mas o ComponentTracer está no caminho de classe e no jar do agente. Então eu estou perdido.

Se algum de vocês vê onde estou perdendo alguma coisa.

Felicidades,

Tom

questionAnswers(2)

yourAnswerToTheQuestion