2011-12-26 2 views
12

maven 3.0.3とhibernate 4.0.0を使用してmavenテストを実行しています。 on jdk7 update 2.Java 7でユニットテストを実行するにはどうすればいいですか?java.lang.VerifyError:分岐先のスタックマップフレームが期待されます

次のエラーが発生します。

Caused by: java.lang.VerifyError: Expecting a stackmap frame at branch target 63 in method ${myDomainClass}.equals(Ljava/lang/Object;)Z at offset 24 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2442) 
    at java.lang.Class.getDeclaredMethods(Class.java:1808) 
    at org.hibernate.property.BasicPropertyAccessor.getterMethod(BasicPropertyAccessor.java:352) 
    at org.hibernate.property.BasicPropertyAccessor.getGetterOrNull(BasicPropertyAccessor.java:331) 
    at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:314) 
    at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:310) 
    at org.hibernate.internal.util.ReflectHelper.getter(ReflectHelper.java:250) 
    at org.hibernate.internal.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:229) 
    at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:314) 
    at org.hibernate.cfg.HbmBinder.bindSimpleId(HbmBinder.java:447) 
    at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:380) 
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:320) 
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:171) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:3377) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXmlQueue(Configuration.java:3369) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3357) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1334) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:184) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:314) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 

My Equalsメソッドは、commons-lang 2.6のEqualsBuilderを使用しています。 私は、次のMavenは、このJava 7 JVM verifyError

注読んだ後

SET MAVEN_OPTS=%MAVEN_OPTS% -XX:-UseSplitVerifier 

を付き合え設定:私のテストは、JDKの下で1.6アップデート29

私はこれをどのように修正すればよいの作品を? -XX:-UseSplitVerifierを設定してもエラーが発生しているようです。 surefire plugin documentation MAVEN_OPTSによると

+0

私はすべてのプロジェクトをもう一度きれいにしてビルドし、他のコモンズ・ラング・リッドを試してみます。この問題のようなものです:http://stackoverflow.com/a/8617057/1064325 – falsarella

+0

Hibernateはcglibを使用し、Springの設定方法に依存しています。同様のライブラリを使用している可能性もあります。より新しいバージョンのcglibをクラスパスで使ってみて、それが満足できるかどうか確認してください。 –

答えて

14

は、生成されたJVMによって継承されたので、あなたは、-XXとargLine configパラメータを指定する必要はありませんされていますのmaven-確実な - プラグイン構成要素で-UseSplitVerifier。

+0

おそらく答えを受け入れることができます。ありがとう。 :) –

+4

例: ' org.apache.maven.plugins のmaven-確実な-プラグイン <設定> -XX:-UseSplitVerifier ' –

+0

方法Antを使ってこれを行うには?私が試したこと働いていない。私はJDK 6を使用しています。u43 –

-1

"改良された"バイトコードベリファイア(実際にはダンプされ、コンパイラによって多くのベリファイア情報が提供されることが要求されています)に遭遇しているようです。 "改善された"バイトコード形式を生成するコンパイラ文字列によってコードを処理するか、またはクラスファイルのバージョンを "古い"バージョンに設定する必要があります(私は50.0未満であると思っています)。

+0

問題は実際にはユーザコードにありませんが、HibernateやCGLIBなどのツール/ライブラリにあります。これらのツールは新しいバイトコード要件を認識しておらず、明らかにJava 7をターゲットにしてコンパイルされたクラスではうまく動作しません。 –

+0

@EugeneKuleshov - 私が提案した2つのソリューション以外にどのようなソリューションを提案しますか? –

+0

ここに事があります。オリジナルのポスターの問題を解決したわけではありませんでしたが、バイトコード検証ツールについて攻撃的な発言はほとんどありませんでした。 –

関連する問題