maven项目生成war包,发布tomcat服务器报错,问题解决

问题:maven项目生成war包,发布tomcat服务器报错。查看catalina.out日志,解决一个个问题解决

---问题1:日志中jar not loaded.  Offending class: javax/servlet/Servlet.class

INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

导致原因:项目中servlet-api.jar和tomcat服务器中的servlet jar包,相互冲突了。

解决:将pom.xml对应jar包的scope改为provided(默认是compile)

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
拓展:

在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值: 

    * compile,缺省值,适用于所有阶段,会随着项目一起发布。 
    * provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 
    * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。 
    * test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。 
    * system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
 


---问题2:日志中报错信息:

One or more listeners failed to start. Full details will be found in the appropriate container log file

导致原因:Tomcat报的错太含糊,什么错都没报出来,只提示了listeners failed to start

解决:为了调试,我们要获得更详细的日志。可以在WEB-INF/classes目录下新建一个文件叫logging.properties,内容如下 :

  1. handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler  
  2.   
  3. ############################################################  
  4. # Handler specific properties.  
  5. # Describes specific configuration info for Handlers.  
  6. ############################################################  
  7.   
  8. org.apache.juli.FileHandler.level = FINE  
  9. org.apache.juli.FileHandler.directory = ${catalina.base}/logs  
  10. org.apache.juli.FileHandler.prefix = error-debug.  
  11.   
  12. java.util.logging.ConsoleHandler.level = FINE  
  13. java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

这样,我们再启动tomcat时,就会在logs目录下生成一个更详细的日志error-debug.2017-08-16.log

后来仔细查看后,是因为jdk版本不匹配导致的 Unsupport version 52.0


---问题3:jdk版本不匹配导致的 Unsupport version 52.0

导致原因:高版本JDK编译的class不能在低版本的jvm虚拟机下运行,否则就会报此类错误。

服务器上的jdk版本是1.7的,而本地maven项目pom.xml配置的编译版本是1.8,所以导致本地打的war包,发布到服务器上无法启动的问题。

解决:maven-compiler-plugin 指定JDK版本为1.7

<build>
<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
   ...
   ...
</plugins>
</build>

后来再次打包,问题得到解决!!!


---问题4:如果是非maven项目,修改项目的编译版本为1.7

导致原因:无

解决:以idea开发工具为例,File->Settings... 查找 Java Complier修改为1.7即可。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值