前面一篇文章中咱们了解了html
在myeclipse中新建Maven框架的web项目java
那么若是咱们原来有一些项目如今想转成maven项目应该怎么作呢git
我收集到了三种思路:github
1、新建一个maven项目,把原项目按照新项目的框架移植过去web
2、在原项目的框架上进行修改,把项目目录结构修改为maven框架同样 (详见:为已有的web project项目加入maven支持,并使用myeclipse的插件)spring
3、不改动原项目目录结构,经过pom.xml文件来配置目录mongodb
我的意见,在原项目上作目录结构容易出问题,特别是已经有svn信息时,因此我推荐方案一和三。express
本篇先尝试方案一。apache
我原有一个ipFilter项目,如今已经新建好了maven框架的web项目ipFilterM (x详见:在myeclipse中新建Maven框架的web项目)json
ipFilter的目录结构如图:

ipFilterM的目录结构如图:

在pom.xml中添加依赖包的配置
在ipFilter项目中依赖了不少包,如图:

咱们要把这些依赖包配置到pom.xml文件中
未配置前pom.xml的内容以下:
配置方法详见:
myeclipse中运用maven自动下载包
添加一个咱们本身的包后,发现ipFilterM项目中自动生成了maven的依赖library,里面就有咱们新添加的包

在添加过程当中,每点击一次保存,都会自动从中央库下载依赖包,若是项目出现了红色感叹号,则说明 某个包的依赖与已有的依赖冲突或者重复了,删除该依赖保存便可回复正常
有X号可是没有报错信息,则说明 某个包在中央库下载不到,坐标不对,这时候尝试换换版本号可回复正常
依次把ipFilter的依赖包添加完,pom.xml以下:
将java类移植
接着,我将几个要用的java类新建在ipFilterM的src/main/java中,下面的图片分别是两个项目对应文件夹的目录图。
直接把相关文件夹复制过去便可:
移植完后,maven install 一下,则会在target路径下生成war包
至此,咱们的项目就移植完了。
解决包的冲突
但此时的war包直接复制到tomcat的webapp路径下 启动并不可用
Maven对于新手来讲,最痛苦的一件事莫过于包之间的冲突,因为Maven的依赖传递性,当你引入一个依赖类时,其身后的依赖类也一块儿如过江之鲫纷至沓来了。
举例来讲
A依赖于B及C,而B又依赖于X、Y,而C依赖于X、M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(通常状况下了,Maven可经过<scope>等若干种方式控制传递依赖)。
这里有一个须要特别注意的,即B和C同时依赖于X,假设B依赖于X的1.0版本,而C依赖于X的2.0版本,A究竟依赖于X的1.0仍是2.0版本呢?
这就看Classloader的加载顺序了,假设Classloader先加载X_1.0,而它就不会再加载X_2.0了,若是A偏偏但愿使用X_2.0呢,血案就这样不期而遇了。
要想项目成功运行,咱们还要解决包的冲突问题。
咱们在myeclipse的pom视图能够看到冲突的状况
解决的方法是只保留一个最高级的包,其余的低级包找到它的上级包 添加<exclusions>把低级包排除出去
- <!--若是你的工程是用maven管理的话,能够在commons-logging的依赖里把servlet-api-2.3去除掉,再加入你所须要的版本的servlet-api依赖。大概的例子以下: -->
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.1.1</version>
- <exclusions>
- <exclusion>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
-
- <dependency>
-
-
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>servlet-api-2.5</artifactId>
- <version>6.1.14</version>
- <scope>provided</scope>
- </dependency>
- <!-- 指定scope为provided能够避免在发布的时候把servlet-api包拷到lib目录下。 -->
详情可参考:
后续请看:
maven项目如何启动运行---发布到tomcat中
在myeclipse中启动maven项目
对比新旧工程的lib包
处理完冲突后,咱们就能够maven install生成war包了。
但,放在tomcat中每每仍是会报不少错,这显然是缺乏包的现象。
咱们这时候就要对比解压出来的新工程和旧工程中lib的包的状况
多了的,要设置成provideed
少来的,要补上
当包数量和个数如出一辙时,咱们离成功又进了一步。
检查生成的工程中class
检查生成的工程是否包含了 咱们的spring.xml和struts.xml文件
若是包的数量已经如出一辙了,可是启动仍是不少错误。
只有一个缘由
就是打war包是 spring.xml等文件没加载进class中
咱们能够比较一下生成的maven工程和旧工程之间的区别
这时候咱们要对xml文件夹设置一下路径
对着项目右键
Properties--->MyEclipse--->Deployment Assembly 把resource的文件夹输出路径设置成跟 src/main/java同样便可
刷新项目,这时候打war包,运行。
终于改版完成!
启动不报错,并且页面访问也能够用了。
最终的pom.xml以下: