记录用tomcat7插件部署时遇到的一些错误
-
1.Maven打包web项目报错Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if
- 原因分析:maven的web项目默认的webroot是在src\main\webapp。如果在此目录下找不到web.xml就抛出以上的异常
- 解决方法1(试过):应该在src/main 下面 创建webapp,同时要注意webapp是否有蓝色的点,如果没有蓝色的点,那么在pom.xml文件中看看packaging标签的值是不是war.
- 解决方法2(没有试过):需要在pom.xml中增加配置,如下:
<build> <finalName>simple-webapp</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <webXml>WebContent\WEB-INF\web.xml</webXml> </configuration> </plugin> </plugins> </build>
-
2.lombok使用时出现问题,报错如下:
Unable to process Jar entry [module-info.class] from Jar [jar:file:/xxxxxxxx/lombok-1.18.4.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19- 原因分析:从lombok-1.16.20开始打包中存在一个叫module-info.class的文件,一些版本的tomcat启动时,如果classpath下有这个包就会报上面的错误
- 解决方法1(试了可行):maven中将lombok的scope设为provider;——有效,lombok为注解增强编译,运行时不需要
- 解决方法2(没有试过):对方系统tomcat版本为7.0.61,本地换用tomcat 8.0.53;——有效,未发现异常
-
3.报错信息:Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]
- 原因分析:当依赖的scope为provided的时候,在编译和测试的时候有效,在执行(mvn package)进行打包成war包的时候不会加入,比如:servlet-api,因为servlet-api,tomcat等web服务器中已经存在,如果在打包进去,那么包之间就会冲突
- 解决方法:将servlet-api,jsp-api,jstl的scope设为了provided,
-
4 报错信息:java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
-解决办法:网上查了很多,都说把jstl导入就可以,但是我本来就已经导入却依然报错,后面把另外两个依赖导入后就神奇的好了.<!-- jstl --> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- jstl-api --> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <!-- jstl-impl --> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jstl-impl</artifactId> <version>1.2</version> </dependency>
-
5.java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList的问题
- 原因分析: 这是因为springmvc默认是没有对象转换成json的转换器的,需要手动添加jackson依赖。
- 解决方法:在spring-mvc.xml文件中加入如下配置
<mvc:message-converters register-defaults="true"> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes" value="application/json"/> <property name="features"> <list> <value>WriteMapNullValue</value> <value>WriteDateUseDateFormat</value> </list> </property> </bean> </mvc:message-converters>
-
6.从mysql数据库换成mariadb需要做以下几件事
1.修改pom依赖
- 在pom里面mysql的配置为
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency>
- 在pom里面mariadb的配置为
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client --> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>2.6.0</version> </dependency>
2.修改db文件为mariadb的
jdbc.driver=org.mariadb.jdbc.Driver jdbc.url=jdbc:mariadb://xxx:3306/mybatis jdbc.username=root jdbc.password=xxx