找不到可依赖的服务器,Tomcat启动找不到项目依赖jar的解决方式

c4468b3f4df77e96b0a416fa2a870fba.png

Tomcat启动找不到项目依赖jar的解决方式

一、背景

最近在写一个MQ框架-gmq,先写的服务端,然后写客户端。感觉服务端和客户端分成两个独立的项目不合适,于是改成了maven父子模块的形式。父项目相当于一个壳,里面包含服务端、客户端两个模块。

二、问题描述

1、当时服务端是单独一个项目的时候,启动是正常的。pom配置如下:

f946c9f4d3dc05680f2f30aa8ad9f5b3.gif

9730eae224b24142a90332e0171bb16d.gif

4.0.0

com.shuimutong

gmq-server

war

0.0.1-SNAPSHOT

gmq

http://maven.apache.org

UTF-8

1.0.1-SNAPSHOT

2.0.0-SNAPSHOT

junit

junit

4.11

test

javax.servlet

javax.servlet-api

3.1.0

me.lovegao

gdao

${gdao.version}

com.shuimutong

gmvc

${gmvc.version}

com.alibaba

fastjson

1.2.60

org.apache.commons

commons-lang3

3.4

log4j

log4j

1.2.16

org.slf4j

slf4j-api

1.6.1

org.slf4j

slf4j-log4j12

1.6.2

com.shuimutong.gmq_server

org.apache.maven.plugins

maven-compiler-plugin

3.7.0

1.8

1.8

View Code

2、然后改成了父子模块的形式。

其中,父项目pom如下:

f946c9f4d3dc05680f2f30aa8ad9f5b3.gif

9730eae224b24142a90332e0171bb16d.gif

4.0.0

com.shuimutong

gmq

${global.version}

pom

http://maven.apache.org

gmq-server

gmq-client

UTF-8

0.0.1-SNAPSHOT

1.2.60

2.0.0-SNAPSHOT

1.0.1-SNAPSHOT

0.0.2-SNAPSHOT

me.lovegao

gdao

${gdao.version}

provided

com.shuimutong

gmvc

${gmvc.version}

provided

com.shuimutong

gutil

${gutil.version}

provided

com.alibaba

fastjson

${fastjson.version}

provided

org.apache.commons

commons-lang3

3.4

provided

log4j

log4j

1.2.16

provided

org.slf4j

slf4j-api

1.6.1

provided

org.slf4j

slf4j-log4j12

1.6.2

provided

org.apache.maven.plugins

maven-compiler-plugin

3.7.0

1.8

1.8

View Code

GMQ服务端pom如下:

f946c9f4d3dc05680f2f30aa8ad9f5b3.gif

9730eae224b24142a90332e0171bb16d.gif

4.0.0

com.shuimutong

gmq

${global.version}

com.shuimutong

gmq-server

war

${global.version}

gmq-server

http://maven.apache.org

UTF-8

junit

junit

4.11

test

javax.servlet

javax.servlet-api

3.1.0

me.lovegao

gdao

com.shuimutong

gmvc

javax.servlet

javax.servlet-api

com.alibaba

fastjson

org.apache.commons

commons-lang3

log4j

log4j

org.slf4j

slf4j-api

org.slf4j

slf4j-log4j12

com.shuimutong.gmq_server

org.apache.maven.plugins

maven-compiler-plugin

3.7.0

1.8

1.8

View Code

3、通过Eclipse部署到Tomcat启动,具体日志如下:

f946c9f4d3dc05680f2f30aa8ad9f5b3.gif

9730eae224b24142a90332e0171bb16d.gif

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server.服务器版本: Apache Tomcat/9.0.14

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server.构建: Dec 6 2018 21:13:53 UTC

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server version number: 9.0.14.0

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: OS Name: Windows 10

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: OS.版本: 10.0

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: 结.造: amd64

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Java 环境变量: D:\develop\jdk1.8.0_144\jre

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: JVM 版本: 1.8.0_144-b01

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: JVM.供应商: Oracle Corporation

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: CATALINA_BASE: E:\develop\work_space\.metadata\.plugins\org.eclipse.wst.server.core\tmp0

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: CATALINA_HOME: D:\develop\apache-tomcat-9.0.14

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Dcatalina.base=E:\develop\work_space\.metadata\.plugins\org.eclipse.wst.server.core\tmp0

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Dcatalina.home=D:\develop\apache-tomcat-9.0.14

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Dwtp.deploy=E:\develop\work_space\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Djava.endorsed.dirs=D:\develop\apache-tomcat-9.0.14\endorsed

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Dfile.encoding=UTF-8

十一月 10, 2019 10:43:30 上午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent

信息: Loaded APR based Apache Tomcat Native library [1.2.19] using APR version [1.6.5].

十一月 10, 2019 10:43:30 上午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent

信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].

十一月 10, 2019 10:43:30 上午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent

信息: APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]

十一月 10, 2019 10:43:30 上午 org.apache.catalina.core.AprLifecycleListener initializeSSL

信息: OpenSSL successfully initialized [OpenSSL 1.1.1a 20 Nov 2018]

十一月 10, 2019 10:43:30 上午 org.apache.coyote.AbstractProtocol init

信息: 初始化协议处理器 ["http-nio-8080"]

十一月 10, 2019 10:43:31 上午 org.apache.coyote.AbstractProtocol init

信息: 初始化协议处理器 ["ajp-nio-8009"]

十一月 10, 2019 10:43:31 上午 org.apache.catalina.startup.Catalina load

信息: 服务器在[813]毫秒内初始化

十一月 10, 2019 10:43:31 上午 org.apache.catalina.core.StandardService startInternal

信息: Starting service [Catalina]

十一月 10, 2019 10:43:31 上午 org.apache.catalina.core.StandardEngine startInternal

信息: Starting Servlet engine: [Apache Tomcat/9.0.14]

十一月 10, 2019 10:43:32 上午 org.apache.jasper.servlet.TldScanner scanJars

信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。

十一月 10, 2019 10:43:34 上午 org.apache.jasper.servlet.TldScanner scanJars

信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。

十一月 10, 2019 10:43:34 上午 org.apache.catalina.core.ApplicationContext log

信息: Marking servlet [gmvc] as unavailable

十一月 10, 2019 10:43:34 上午 org.apache.catalina.core.StandardContext loadOnStartup

严重: Servlet [gmvc] in web application [/com.shuimutong.gmq_server] threw load() exception

java.lang.ClassNotFoundException: com.shuimutong.gmvc.handler.XDispatcherServlet

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1343)

at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1173)

at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:540)

at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:521)

at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)

at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1031)

at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:971)

at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4849)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5165)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1382)

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1372)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)

at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:907)

at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1382)

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1372)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)

at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)

at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:907)

at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at org.apache.catalina.core.StandardService.startInternal(StandardService.java:423)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:933)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)

at org.apache.catalina.startup.Catalina.start(Catalina.java:637)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)

十一月 10, 2019 10:43:34 上午 org.apache.coyote.AbstractProtocol start

信息: 开始协议处理句柄["http-nio-8080"]

十一月 10, 2019 10:43:34 上午 org.apache.coyote.AbstractProtocol start

信息: 开始协议处理句柄["ajp-nio-8009"]

十一月 10, 2019 10:43:34 上午 org.apache.catalina.startup.Catalina start

信息: Server startup in [3,492] milliseconds

十一月 10, 2019 10:43:37 上午 org.apache.catalina.core.StandardServer await

信息: A valid shutdown command was received via the shutdown port. Stopping the Server instance.

十一月 10, 2019 10:43:37 上午 org.apache.coyote.AbstractProtocol pause

信息: Pausing ProtocolHandler ["http-nio-8080"]

十一月 10, 2019 10:43:37 上午 org.apache.coyote.AbstractProtocol pause

信息: Pausing ProtocolHandler ["ajp-nio-8009"]

十一月 10, 2019 10:43:38 上午 org.apache.catalina.core.StandardService stopInternal

信息: Stopping service [Catalina]

十一月 10, 2019 10:43:38 上午 org.apache.coyote.AbstractProtocol stop

信息: Stopping ProtocolHandler ["http-nio-8080"]

十一月 10, 2019 10:43:38 上午 org.apache.coyote.AbstractProtocol stop

信息: Stopping ProtocolHandler ["ajp-nio-8009"]

十一月 10, 2019 10:43:38 上午 org.apache.coyote.AbstractProtocol destroy

信息: 正在摧毁协议处理器 ["http-nio-8080"]

十一月 10, 2019 10:43:38 上午 org.apache.coyote.AbstractProtocol destroy

信息: 正在摧毁协议处理器 ["ajp-nio-8009"]

View Code

简而言之,找不到gmvc的XDispatcherServlet类。(手写框架,写过的框架得用,所以就用了自己写的MVC框架)

反复install框架代码,无济于事。

某担心是gmvc框架的问题,于是部署了框架的测试代码,启动正常。

那么可以定位到,问题出在使用者身上。

三、解决问题之道

1、定位问题

想了又想,部署、重启了许多遍,无济于事。看网上有人说是Eclipse对maven支持不好,换IDEA,我差点换了。

看了好几遍项目结构,没有问题。

Marking servlet [gmvc] as unavailable

看着tomcat的启动日志,真想debug一下tomcat的代码,奈何做不到。

仔细想想,问题应该出在部署tomcat这个环节。

我打开部署项目到tomcat的路径:

E:\develop\work_space\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gmq-server

Eclipse的workspace里。。

看了项目的lib目录,只有一个jar:javax.servlet-api-3.1.0.jar

原来部署到tomcat里的时候,那些依赖的类没有部署过来。

2、解决问题

某百度了一下maven的scope,回想到以前项目里用provided,是因为其他模块已经包含了,打包时不需要再打入,我这里使用显然不合适。

我于是把父项目的scope全部去掉,但是依然不行。

最后看到了一篇文章(https://blog.csdn.net/u010295735/article/details/77504621),终于启动正常了。

文章整理的很到位,我这里就不再复述了,仅贴图一张,详情请参考原文。

----------------------下面是图----------------------

eab386dbec3953eed4a65dc60fc93d5f.png

原文链接:https://www.cnblogs.com/shuimutong/p/11831962.html

如有疑问请与原作者联系

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值