Administrator
发布于 2022-10-10 / 42 阅读
0
0

SpringMVC+Maven启动问题

在复习SpringMVC时,因为要用到Tomcat服务器,这个时候有两个选择:

  1. 使用本地已有的tomcat
  2. 使用tomcat maven插件

因为我创建项目的时候选的就是Maven项目,加上我电脑没有装Tomcat,所以我选择使用Maven插件的方式

 <plugins>
  <plugin>
    <!-- https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat8-maven-plugin -->
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
      <!-- 通过maven tomcat7:run运行项目时,访问项目的端口号 -->
      <port>8080</port>
      <!-- 项目访问路径  本例:localhost:9090,  如果配置的aa, 则访问路径为localhost:9090/aa-->
      <path>/</path>
    </configuration>
         </plugin>

</plugins>

这个时候我的迷之操作来了
我选择在lib文件夹下导入相关的jar包
image-1665364782464

然后,使用Tomcat插件启动的时候出现了这样的问题

十月 10, 2022 9:20:29 上午 org.apache.catalina.core.StandardContext listenerStart
严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
	at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
	at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4854)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)

在网上搜错误的时候,一般都是说jar包没有导入完全

发生这种情况的原因是 idea并没有把这个项目依赖的类库与项目同时部署到服务器,我们把项目与Maven的依赖加上就可以了。解决如下:

image-1665365083331

但我这么操作则提示:

Artifact SpringMVC:war exploded: artifact 'SpringMVC:war exploded' is imported from Maven.
Any changes made in its configuration might be lost after reimporting.

好,那lib文件夹也是成功导入进去了的,虽然有这个提示但不影响,但是启动依旧是失败的。

我个人理解是:你所打包的war包是由Maven打包的,你导入的依赖Maven并不会帮你一起打进war包
所以,编译的时候会说你缺少某些jar包

解决办法:

  1. 如果lib文件夹自行打包,那么使用本地的Tomcat进行打包,就是安装Tomcat配置运行,那么Maven没有导入依赖也没事
  2. 在Maven中导入相关的依赖后运行

总结就是:使用Maven插件启动就不要自行建lib文件夹导入依赖,不然Maven打包不会将你导入的jar包一并打包,别整那些奇奇怪怪的操作


评论