本文建立在一些达人的技术文、stackoverflow的回答、springboot的官方文档的基础上的。主要是对在idea下开发的springboot1.5.6(相近的1.5.2也适用)web程序,如何使用jdk1.6编译生成,并且能够被正常打为war包部署到tomcat6中运行(tomcat6使用的jdk也是1.6版本)等内容进行介绍。在文章最后,将会赋上一个作者实现的demo下载链接。
程序人生:实际上,最简单的方法就是升级到jdk1.7以及tomcat7,但人生十有八九不如意,作为程序猿,对忍受并解决历史遗留问题早已无力吐槽,一声叹息后开始埋头解决。没有仔细看文档的各种配置真的是虐人千万遍……
话归主题。
开发环境:
idea2016.3.4;
jdk1.6.0_26 x86;
部署环境:
jdk1.6.0_26 x86;
tomcat6.0.45 x86;
springboot版本:1.5.6(其他版本应该问题也不大)
主要的问题及解决说明:
1、org/apache/juli/logging/LogFactory类无法找到,这个是由于pom.xml里没有添加对org.apache.tomcat:tomcat-juli:7.0.59的引用,在pom.xml里的<dependencies>节点内添加子节点(tomcat.version的值见2):
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
2、开发调试时,使用springboot内置的tomcat服务时,由于默认使用的是tomcat8+,在使用jdk1.6时,会出现一些问题(具体不记得了……),解决方式是在pom.xml的<properties>节点里添加如下子节点:
<tomcat.version>7.0.59</tomcat.version>
为什么上面需要7.0.59这个版本,比较重要的一个原因是org.apache.catalina.SessionIdGenerator这个类是7.0.58版本以后才可用,你用更早的版本类将不会被找到,此外就是网文都说需要tomcat7配合jdk1.6,这个没细研究,反正是部署到tomcat6上没有报SessionIdGenerator类未找到的错误;
3、pom.xml的<properties>节点里添加如下几个子节点:
<java.version>1.6</java.version>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
4、springboot内jackson的版本问题。此问题在springboot的官方文档里进行了说明,在pom.xml的<properties>节点里添加如下子节点:
<jackson.version>2.6.7</jackson.version>
此外,还需要在pom.xml文件内建立一个<dependencyManagement>节点,里面添加如下内容(从springboot给的解决方案里抄的):
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate4</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk7</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-base</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
5、web.xml文件的手工添加。这点也是抄达人们的(版权不归我):在/src/main/文件夹下,建立一个子文件夹webapp,在其下建立一个文件夹WEB-INF,然后在WEB-INF内建立一个web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.zc.HellomixApplication</param-value>
</context-param>
<listener>
<listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextAttribute</param-name>
<param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
上面基本一看就明白:就是为了解决tomcat6的servlet-api是2.5版本的,而springboot默认非要3.0及以上。
6、其余配置问题。
在配置spring-boot-starter-web时,排除了log4j-over-slf4j、spring-boot-starter-tomcat而改为添加特定版本的前两者依赖;
添加了spring-boot-legacy依赖;
添加了javax.inject依赖;
<build>节点内的<plugins>子节点内,添加了spring-boot-maven-plugin、maven-compiler-plugin、maven-war-plugin、maven-deploy-plugin、tomcat6-maven-plugin(有些可能不需要,比如最后一个如果不使用mvn tomcat6:deploy的话其实也没有必要)等插件;
<build>节点内的<resources>子节点内,添加了对src/main/java路径内的xml进行打包包含的配置。
以上就是所有的了,配合demo,整个基础框架应该就有了。
参考:
java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决:http://xuejiangtao.iteye.com/blog/882585
SpringBoot应用部署到Tomcat中无法启动问题:http://blog.youkuaiyun.com/asdfsfsdgdfgh/article/details/52127562
spring-boot在jdk1.6下运行web项目:http://blog.youkuaiyun.com/u013593306/article/details/49864917
spring boot项目发布tomcat容器(包含发布到tomcat6的方法):http://www.cnblogs.com/weixliu/p/6432342.html
spring-boot-legacy:https://github.com/dsyer/spring-boot-legacy
Spring开发中出现Unsupportedmajor.minor version 51.0错误:http://www.codeweblog.com/spring开发中出现unsupported-major-minor-version-51-0错误/
84.11 How to use Java 6:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-use-java-6
Tomcat 7.0.25 SessionIdGenerator exception:https://stackoverflow.com/questions/40041162/tomcat-7-0-25-sessionidgenerator-exception
下载链接:http://download.youkuaiyun.com/detail/smartcore/9918120