问题: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
后来仔细查看后,是因为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即可。