简介:
公司项目之前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>