4

私はJasper Reportsを使用しており、クラスパスで次のライブラリを使用しています

jasperreports-4.5.1.jar
common-digester3-3.2.jar
common-digester2.1.jar
castor-1.2.jar
commons-beanutils-1.8..0.jar
commons-collections-2.1.1.jar
commons-logging-1.1.1.jar
groovy-1.2.6.jar
asm-2.2.3.jar
asm-3.1.jar
asm-all-3.1.jar
antlr-3.3.1.1.jar
jtds-1.2.5.jar

次の例外が発生しました

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
at org.codehaus.groovy.control.CompilationUnit.createClassVisitor(CompilationUnit.java:791)
at org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:755)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:967)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:546)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:524)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:501)
at net.sf.jasperreports.compilers.JRGroovyCompiler.compileUnits(JRGroovyCompiler.java:96)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:188)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:212)
at Utilities.ReportDriver.runReport(ReportDriver.java:81)
at jewelleryerpapplication.GUI.MainReports.jbtnViewReportActionPerformed(MainReports.java:544)
at jewelleryerpapplication.GUI.MainReports.access$100(MainReports.java:18)
at jewelleryerpapplication.GUI.MainReports$2.actionPerformed(MainReports.java:210)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)

次のコードの実行時:

 JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, jdbcConnection);
 JasperViewer.viewReport(jasperPrint);

私は何を間違えましたか?これを修正したり、さらにデバッグしたりするにはどうすればよいですか?

4

2 に答える 2

4

2つの異なるバージョンのASMがリストされていることに注意してください。これは、そのライブラリで非常に一般的な問題です。これは、他の多くのライブラリが内部でライブラリを使用し、Javaのクラスパスメカニズムでは同じライブラリの異なるバージョンを使用できないためです。(これはGroovyとHibernateの間で常に発生します。)したがって、クラスパスを設定するとき、1つのライブラリーはバージョン2.2.3を必要とし、もう1つは3.1を必要とします。ただし、クラスを検索する場合は、クラスパスの最初のクラスが優先されます。あなたの場合、Groovyは、どちらのバージョンが勝ったとしても存在しないClassWriterのコンストラクターを呼び出そうとしています(実際のクラスパスの順序でリストした場合は2.2.3)。さまざまなバージョンが要求されているこのような状況では、バージョンを選択して指を交差させるだけです。試してみて、必要な場所で機能するかどうかを確認してください。ほとんどの場合、新しいASMバージョン(3.1)を使用すれば、すべてが正常になります。とにかく、それは私の経験です。すべてに対応するバージョンが見つからない場合は、手に大きな問題がある可能性があります。

于 2012-04-26T02:41:40.003 に答える
0

同様のエラーメッセージがありました。ASM に依存するのではなく、使用されている groovy ライブラリ groovy-xxxjar に依存していました。注意してください - この作業を行うには、groovy-all-xxxjar を使用する必要があります。

于 2012-11-28T13:19:18.950 に答える