[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 メーリングリストの案内