4

次の非常に単純なテストがあります。

@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 以上

問題を解決する方法はありますか?プロジェクトの特別な構成でしょうか?リソースローダーに問題があると思います...

4

0 に答える 0