Maven WAR 为雄猫建造:"Could not open ServletContext resource [/WEB-INF/applicationContext.xml]"



已经有一些有关此主题的问题,但是我的tomcat仍然无法顺利运行。
我的工作区包括JSF和Spring。只要我在Eclipse中构建和运行本地项目并将其部署到Eclipse的Tomcat,一切都可以正常工作。但是现在,我想将战争文件部署到外部tomcat中,就我而言,在码头柜中是一个tomcat。

所以我要做的是:
*使用以下maven-pom(提取)构建战争文件。
*并将战争文件复制到我的运行容器中:

Docker CP ProjectName.war ContainerId:/usr/local/tomcat/webApps/

在Tomcat启动期间,我总是会遇到以下错误。

在开始时,我将ApplicationContext.xml文件直接在Web-Inf文件夹中。但是我读到,最好将其放入" Web-Inf class"中,因此我将其移动到了那里,并在Web.xml中进行了以下上下文锁定参数。

所以工作区层次结构看起来像下图中的图片ProjectName
| - WebContent
  | - Web-Inf
|-pom.xml

另一件事是,当我在构建之后提取战争文件以查看ApplicationContext.xml-File实际上是位置时,我在" Web-Inf class"中找到了它在Web.xml中缺少找到它。我还尝试将ApplicationContext.xml-File的副本放入 src/main/resources 中,这导致了该文件位于战争文件中正确的位置,但是网络。XML更改。

某人是否有建议将ApplicationContext.xml-File以及如何在构建过程中以正确的方式包含和指向它。另外,为什么Web.xml在构建过程中会更改。还是有完全不同的问题?

感谢您的帮助。

pom.xml

<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
    <jsf.version>2.2.14</jsf.version>
    <spring.version>4.3.6.RELEASE</spring.version>
</properties>
<dependencies>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>${jsf.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>${jsf.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <!-- JSF Ende -->
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>6.1.0.jre8</version>
    </dependency>
    <!-- Spring Start -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- Spring Ende -->
</dependencies>
<build>
    <finalName>projectName</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <!--<webXml>WebContentWEB-INFweb.xml</webXml>-->
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

启动错误

2017-02-24 03:15:44 ERROR ContextLoader:351 - Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:613)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:514)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:940)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1816)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
... 25 more
24-Feb-2017 03:15:44.613 SEVERE [localhost-startStop-2] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
24-Feb-2017 03:15:44.614 SEVERE [localhost-startStop-2] org.apache.catalina.core.StandardContext.startInternal Context [/projectName] startup failed due to previous errors
2017-02-24 03:15:44 INFO  XmlWebApplicationContext:987 - Closing Root WebApplicationContext: startup date [Fri Feb 24 03:15:44 UTC 2017]; root of context hierarchy
2017-02-24 03:15:44 WARN  XmlWebApplicationContext:1005 - Exception thrown from LifecycleProcessor on context close
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Fri Feb 24 03:15:44 UTC 2017]; root of context hierarchy
at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:417)
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1002)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:961)
at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:581)
at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:116)
at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4900)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5537)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:221)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:149)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:940)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1816)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
24-Feb-2017 03:15:44.622 INFO [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive 

web.xml

  <!-- Add Support for Spring -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
  <listener>
    <listener-class>
        org.springframework.web.context.request.RequestContextListener
    </listener-class>
  </listener>

workspace hierarchy

现在我做了一段时间。

  1. " Maven Clean",因为某些依赖性变老而无效。这就是为什么Web.xml在构建过程中不再发生变化
  2. 需要JSF依赖性,因此不再提供"提供"
  3. Docker容器具有JDK 7,但是我的应用程序是使用JDK 8构建的,所以我将容器更改为jdk 8
  4. 的tomcat 8
  5. 需要告诉maven-build web.xml文件在哪里,以及在战争构建中应包含哪些文件。我使用以下maven-plugin进行了此操作:(也不要忘记将Maven依赖项添加到" Eclipse中的部署组件))

maven-war-plugin

<plugin>            
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
   <warSourceDirectory>WebContent</warSourceDirectory>
   <webXml>WebContentWEB-INFweb.xml</webXml>
</configuration>
</plugin>

有娱乐

相关内容

最新更新