您的位置:首页 > 运维架构 > Tomcat

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

2017-08-16 15:02 761 查看
问题: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,内容如下 :

handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler  

  

############################################################  

# Handler specific properties.  

# Describes specific configuration info for Handlers.  

############################################################  

  

org.apache.juli.FileHandler.level = FINE  

org.apache.juli.FileHandler.directory = ${catalina.base}/logs  

org.apache.juli.FileHandler.prefix = error-debug.  

  

java.util.logging.ConsoleHandler.level = FINE  

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即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐