标签:des Lucene blog http io ar os 使用 sp
前面一篇文章中我们了解了
在myeclipse中新建Maven框架的web项目
那么如果我们原来有一些项目现在想转成maven项目应该怎么做呢
我收集到了三种思路:
一、新建一个maven项目,把原项目按照新项目的框架移植过去
二、在原项目的框架上进行修改,把项目目录结构修改成maven框架一样 (详见:为已有的web project项目加入maven支持,并使用myeclipse的插件)
三、不改动原项目目录结构,通过pom.xml文件来配置目录
个人意见,在原项目上做目录结构容易出问题,特别是已经有svn信息时,所以我推荐方案一和三。
本篇先尝试方案一。
我原有一个ipFilter项目,现在已经新建好了maven框架的web项目ipFilterM (x详见:在myeclipse中新建Maven框架的web项目)
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如下:
MyEclipse使用总结——将原有的MyEclipse中的项目转成maven项目[转]
标签:des Lucene blog http io ar os 使用 sp
原文地址:http://www.cnblogs.com/0x2D-0x22/p/4141403.html