[Seasar-user:18563] Re: s2junit4のNoClassDefFoundError
秋山 俊郎
[E-MAIL ADDRESS DELETED]
2009年 10月 2日 (金) 10:43:34 JST
秋山です。
Eclipse上では、ご指摘の設定にしたところ無事動作しました。
ただ、maven test で行うとやはりエラーがでます。
surefireのプラグインが原因でしょうか。
そうすると、mavenと併用で使用する場合
pom.xmlでservlet-apiをprovidedのスコープにして、s2junit4.diconは
元のままで使うのが現実的でしょうか?
(せっかくレスいただいたのに申し訳ないですが..)
java.lang.NoClassDefFoundError: javax/servlet/ServletContext
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getMethod0(Class.java:2670)
at java.lang.Class.getMethod(Class.java:1603)
at
org.junit.internal.requests.ClassRequest.hasSuiteMethod(ClassRequest.java:61)
at
org.junit.internal.requests.ClassRequest.getRunnerClass(ClassRequest.java:50)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28)
at
org.apache.maven.surefire.junit4.JUnit4TestSet.<init>(JUnit4TestSet.java:45)
at
org.apache.maven.surefire.junit4.JUnit4DirectoryTestSuite.createTestSet(JUnit4DirectoryTestSuite.java:56)
at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.locateTestSets(AbstractDirectoryTestSuite.java:96)
at
org.apache.maven.surefire.Surefire.createSuiteFromDefinition(Surefire.java:209)
at org.apache.maven.surefire.Surefire.run(Surefire.java:156)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 30 more
null
org.apache.maven.plugin.MojoFailureException: There are test failures.
以上よろしくお願いします。
Toshihiro Nakamura さんは書きました:
> 中村(taedium)です。
>
>> s2junit4を使用していてNoClassDefFoundErrorが発生します。
>> s2は2.4.39、junitは4.4を使用しています。
>>
>> servlet-apiをクラスパスにいれれば動作するので回避はできるのですが、
>> バッチプログラム環境ですので気になりました。
>> servlet-apiに依存するのは仕方ないでしょうか?
>
> s2junit4.diconを修正することでservlet-apiがなくても
> 動作するようになります。
>
> http://s2container.seasar.org/2.4/ja/S2JUnit4.html#simpleS2junit4Dicon
>
>
> ドキュメントの記載のままだとトランザクションの自動開始/ロールバックの
> 機能がoffになりますが、
> 有効にしたいのであれば、次のようにjtaEnabledプロパティを
> 設定してください。
>
> <component name="context"
> class="org.seasar.framework.unit.impl.SimpleInternalTestContext">
> <property name="jtaEnabled">true</property>
> </component>
>
Seasar-user メーリングリストの案内