maven项目生成war包,发布tomcat服务器报错,问题解决
2017-08-16 15:02
761 查看
问题:maven项目生成war包,发布tomcat服务器报错。查看catalina.out日志,解决一个个问题解决
---问题1:日志中jar
not loaded. Offending class: javax/servlet/Servlet.class
导致原因:项目中servlet-api.jar和tomcat服务器中的servlet jar包,相互冲突了。
解决:将pom.xml对应jar包的scope改为provided(默认是compile)
拓展:
在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即可。
---问题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即可。
相关文章推荐
- 原来是在Tomcat服务器上发布,现在改为JBoss 发布 Struct2 +Spring+hibernate Maven项目出错解决方法
- 解决maven生成的web项目下的servlet.jar与tomcat自带servlet.jar冲突的问题
- 解决eclipse 建立Dynamic web project 项目用Tomcat服务器 不像Myeclipse一样发布到Tomcat目录下的webapps 目录下的问题
- 使用tomcatPlugin配合JRebel解决maven项目依赖war的打包和热部署的问题
- 解决Eclipse下maven项目的jar包无法发布到tomcat中的问题
- Maven教程-解决web项目发布到tomcat中没有lib依赖的问题
- 将SpringBoot Maven项目发布到远程tomcat服务器步骤及相关问题解决
- 【问题解决】IDEA-Maven下Tomcat发布Web项目,遇到Jar包无法找到
- 关于eclipse maven项目直接发布到tomcat服务器找不到lib的解决方法
- Maven教程-解决web项目发布到tomcat中没有lib依赖的问题
- Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法
- Tomcat发布War包或者Maven项目
- maven项目如何生成war文件并部署到tomcat
- eclipse tomcat maven项目布署的一些问题解决方法
- maven项目生成的war包在tomcat下运行报错
- Maven打War包并发布TOMCAT遇到的各种问题
- 发布到tomcat服务器上webapps里的文件名和workspace中项目名称不一致的问题
- Maven -- clean deploy发布jar或war包到远程服务器上报“非法字符: \65279 ”错误的解决方法
- Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法
- Eclipse+Maven快速生成Web项目,解决部署时Maven lib依赖问题