次の非常に単純なテストがあります。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@Transactional
@ContextConfiguration(SpringTestContext.WEB_APPLICATION)
public class SpringWebContextTest {
@Autowired
private WebApplicationContext webApplicationContext;
@Test
public void testSpringWebContextLoad() {
Assert.assertNotNull("application context expected", this.webApplicationContext);
}
}
Eclipse と Maven では問題なく実行されますが、IntelliJ では実行されません。tilesConfigurer が定義済みのビュー定義を見つけられないため、IntelliJ は Spring アプリケーション コンテキストの読み込みに失敗しました。
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
</bean>
<bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" id="tilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/layouts/contentOnly/layouts.xml</value>
<value>/WEB-INF/layouts/backend/layouts.xml</value>
<value>/WEB-INF/layouts/frontend/layouts.xml</value>
<value>/WEB-INF/views/backend/**/views.xml</value>
<value>/WEB-INF/views/frontend/**/views.xml</value>
<value>/WEB-INF/views/exceptions/**/views.xml</value>
<value>/WEB-INF/client/views.xml</value>
</list>
</property>
</bean>
これはスタックトレースです:
java.lang.IllegalStateException: org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99) で ApplicationContext をロードできませんでした org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122) で org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:154) で org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:100) で org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:312) で org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) で org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) で org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12) で org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284) で org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) で org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) で org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) で org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) で org.junit.runners.ParentRunner.runChildren (ParentRunner.java:236) で org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) で org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) で org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) で org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) で org.junit.runners.ParentRunner.run(ParentRunner.java:309) で org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) で org.junit.runner.JUnitCore.run(JUnitCore.java:160) で com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs (JUnit4IdeaTestRunner.java:74) で com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart (JUnitStarter.java:211) で com.intellij.rt.execution.junit.JUnitStarter.main (JUnitStarter.java:67) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) で com.intellij.rt.execution.application.AppMain.main (AppMain.java:134) で 原因: org.springframework.beans.factory.BeanCreationException: クラスパス リソース [META-INF/spring/webmvc-config.xml] で定義された名前 'tilesConfigurer' を持つ Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.IllegalArgumentException: no URL for ServletContext リソース [/WEB-INF/layouts/contentOnly/layouts.xml] です org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) で org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) で org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) で org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) で org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) で org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) で org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) で org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:479) で org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:128) で org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:60) で org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100) で org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248) で org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) で org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) で ... 28以上 原因: java.lang.IllegalArgumentException: ServletContext リソースの URL がありません [/WEB-INF/layouts/contentOnly/layouts.xml] org.springframework.web.servlet.view.tiles3.SpringWildcardServletTilesApplicationContext.getResources(SpringWildcardServletTilesApplicationContext.java:94) で org.springframework.web.servlet.view.tiles3.TilesConfigurer$SpringTilesContainerFactory.getSources(TilesConfigurer.java:286) で org.apache.tiles.factory.BasicTilesContainerFactory.createLocaleDefinitionDao (BasicTilesContainerFactory.java:182) で org.apache.tiles.factory.BasicTilesContainerFactory.createDefinitionsFactory (BasicTilesContainerFactory.java:137) で org.springframework.web.servlet.view.tiles3.TilesConfigurer$SpringTilesContainerFactory.createDefinitionsFactory(TilesConfigurer.java:331) で org.apache.tiles.factory.BasicTilesContainerFactory.createContainer (BasicTilesContainerFactory.java:86) で org.springframework.web.servlet.view.tiles3.TilesConfigurer$SpringTilesContainerFactory.createContainer(TilesConfigurer.java:277) で org.apache.tiles.startup.AbstractTilesInitializer.createContainer (AbstractTilesInitializer.java:114) で org.apache.tiles.startup.AbstractTilesInitializer.initialize (AbstractTilesInitializer.java:64) で org.springframework.web.servlet.view.tiles3.TilesConfigurer.afterPropertiesSet(TilesConfigurer.java:252) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1571) で org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509) で ... 43 以上 原因: java.io.FileNotFoundException: ServletContext リソース [/WEB-INF/layouts/contentOnly/layouts.xml] が存在しないため、URL に解決できません org.springframework.web.context.support.ServletContextResource.getURL(ServletContextResource.java:154) で org.springframework.web.servlet.view.tiles3.SpringWildcardServletTilesApplicationContext.getResources(SpringWildcardServletTilesApplicationContext.java:90) で ... 54 以上
問題を解決する方法はありますか?プロジェクトの特別な構成でしょうか?リソースローダーに問題があると思います...