简介:

公司项目之前Spring+SpringMvc+Mybatis框架,没有使用Maven做项目管理。作为一个但单体项目,每一次更新测试服务器都需要 编译打包,上传到服务器,解压缩,重启Tomcat的流程。因此想通过Jenkins将整个部署更新的流程自动处理。所以摆在面前的第一步就是上一个Maven。

老项目结构

project
├── src
├── WebContent
├── plugin
├── resources
└── sql

上面这个就是一个正常的非Maven的web项目的结构。

第一步. 整理pom.xml

1.添加dependencies

非maven项目的jar 都存放在WebContent/lib 目录下根据这些jar包到
Maven repository去查找对应的jar的坐标添加到pom.xml中即可。

2.添加plugins

这里我们需要添加tomcat7的插件和mybatis-generator-maven-plugin

3.配置resource文件的位置

由于我们的项目mappe.xml是存储在src下 如果不做下面的配置,项目编译后的target文件将不包含所有的mapper.xml。

<resources>
        <resource>
            <directory>src/main/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
    </resources>

第二步 .调整项目结构

调整后的结构

project
├── log
├── plugin
├── sql
├── src
│   ├── main
│   │   ├── java
│   │   ├── resources
│   │   └── webapp
│   └── test
└── pom.xml

将原先老项目的src 全部移动到src/main/java 将原先老项目的resources 全部移动到src/main/resources 将原先的老项目webContent全部移动到src/main/webapp

第三步. 项目启动

我们可以直接通过maven的tomcat7插件来启动项目
这里遇到了第一个问题。

1.org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19

完整的错误日志如下:

org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
	at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:133)
	at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.java:60)
	at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:209)
	at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:119)
	at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2134)
	at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:2010)
	at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1976)
	at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1961)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1319)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
解决方案

1.网上查询后给出的解决方案是换tomcat8 启动就不会有问题,可以尝试更换tomcat8 的插件
2.这个问题引起的原因是:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

将这个版本更换到 错误就不会出现了。

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.1</version>
</dependency>
2.修改JAVA代码之后 不生效。
解决方案

之前的非Maven项目在编译的时候会在WebContent的文件夹下生成classes文件。改造成maven项目之后所有将所有的WebContent移动到src/mian/webapp 下 每次启动时候用到的都是WebContent下老的classes,所以无论如何都不生效。删除 src/main/webapp下的classes 文件夹即可。

3.使用mybatis是自定义的分页类无法实例化
Cannot instantiate object of type xxxx.PaginationPlugin
解决方案

插件无法找到分页类所以无法初始化
在分页插件的dependencies 中添加自定义分页类对应的依赖。
如果你使用的依赖已经在maven仓库中那么直接写maven坐标在这里,如果没有可以使用以下的代码

<dependency>
    <groupId>com.qixiu</groupId>
    <artifactId>qixiu</artifactId>
    <version>1.0</version>
    <scope>system</scope>
     <systemPath>jar包的绝对路径</systemPath>
</dependency>

完整的mybatis-generator-plugin

<plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.2</version>
        <configuration>
          <configurationFile>src/main/resources/generator.xml</configurationFile>
          <verbose>true</verbose>
          <overwrite>true</overwrite>
        </configuration>
        <executions>
          <execution>
            <id>Generate MyBatis Artifacts</id>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
          </dependency>
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
          </dependency>
          <dependency>
            <groupId>com.qixiu</groupId>
            <artifactId>qixiu</artifactId>
            <version>1.0</version>
            <scope>system</scope>
            <systemPath>
             jar包的绝对路径
            </systemPath>
          </dependency>
        </dependencies>
 </plugin>