转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50569603
最近接到通知,阿里集团统一要求把历史项目迁移到阿里生产环境中来,而咱手头这个项目是2012年的老项目,普通java web工程,不能部署进生产环境,得把这个工程转为maven工程。本篇文章记录了java web工程转为maven工程的整个纪录。
然后勾选上Create a simple project (skip archetype selection)—不使用原型骨架。点击next按钮
由于打包方式为war,所以main目录下多了一个webapp目录
由于我们的项目要使用eclipse发布到tomcat下面,这里我们需要先把项目转成dynamic web project
在我们的项目上点击右键,选择properties 并找到 Project Facets ,并点击Convert to faceted form… ,然后勾选Dynamic Web Module 如下图:
结果提示jdk要求java 1.6以上,回头看看maven项目的jdk版本是1.5的,如下图:
我们将其改为1.6,点击OK,同时将JRE library改为1.7,如下图:
同时把图中的java 1.4改为1.7,勾选Dynamic Web Module,点击OK按钮
来看下目前的项目结构,发现多了一个WebContent目录,但这不符合maven项目结构,因此还需要调整。
把WebContent中的两个目录WEB-INF和MATE-INF拷贝进web app目录里面,然后删除WebContent目录
然后我们要修改发布规则,右键点击项目, 选择 Deployment Assembly
选择WebContent,把它remove掉,测试类我们也不需要发布,test的两个目录页可以remove
最后一步,我们要把当前的build path 指向 Maven Dependency, 直接点击add,选择Java Build Path Entries 然后next
点击OK,结束。到目前为止,一个maven web项目搭建完成
把java web工程 Java Resources目录下的src目录下的java文件都拷贝到maven工程中的Java Resources目录src/main/java目录下面
把java web工程 Java Resources目录下的conf目录下的xml配置文件都拷贝到maven工程中的Java Resources目录src/main/resources目录下面
把java web工程 Web Root目录下所有文件文件如下:
把java web工程 Web Root目录下所有文件文件都拷贝到maven工程中的webapp目录下面
到目前为止,java web项目转Maven项目的文件迁移工作全部完成,接下来要做的是个细活,体力活,把java web项目所有引用jar包,都加入到maven pom依赖中来。
首先需要去java web项目中查看都引用了哪些jar包,去java web工程 Java Resources目录下的Libraries查看:
上面只是截取了部分,其实很多,有七八十个jar包,这一个个查都得半天。不过除了一个一个查,也没有其他办法了。
这里我就介绍下如何查maven依赖,比如我要查commons-io-2.4.jar对应的maven 依赖
首先登录maven repository官网http://mvnrepository.com,搜索这个包,如下:
看见结果中有2.4这个版本,点击进去,copy红框中的结果,将其粘贴进pom,其他剩下的就是这样一个一个查,一个一个添加。
过程中可能会碰到这种情况,在maven官网查不到你需要的那个jar包,这个时候,你需要把这个jar包加入到你的本地库,或者以后生产环境中的线上库。
如何加入本地库,进入你需要添加的jar包所在文件路径,然后指定group id和artifactId,如下:
localhost:~ xiaolong$ mvn install:install-file -DgroupId=com.ibatis -DartifactId=ibatis -Dversion=1.0 -Dpackaging=jar -Dfile=ibatis.jar -DgeneratePom=true
其中-Dfile填写源jar包所在路径,执行上述命令会自动把jar包添加至你本地的maven仓库。
在运行maven工程时会碰到不少问题,大都是maven依赖的引用问题:jar包引用错误。
可以通过下面命令来检查:
mvn clean install
下面是我排除错误后,检查成功的结果:
localhost:BUGManager_maven dddd$ mvn clean install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building BUGManager_maven 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ BUGManager_maven ---
[INFO] Deleting /Users/xiaolong/Documents/workspace/BUGManager_maven/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ BUGManager_maven ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 7 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ BUGManager_maven ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 115 source files to /Users/xiaolong/Documents/workspace/BUGManager_maven/target/classes
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/controller/poi/PoiController.java:[52,27] sun.print.resources.serviceui是内部专用 API, 可能会在未来发行版中删除
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/controller/poi/PoiController.java:[53,29] sun.security.provider.MD5是内部专用 API, 可能会在未来发行版中删除
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/controller/poi/PoiController.java:[83,55] com.sun.org.apache.xerces.internal.impl.dv.util.Base64是内部专用 API, 可能会在未来发行版中删除
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/controller/road/RoadController.java:[70,55] com.sun.org.apache.xerces.internal.impl.dv.util.Base64是内部专用 API, 可能会在未来发行版中删除
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/test/myTest.java:[13,29] sun.security.provider.MD5是内部专用 API, 可能会在未来发行版中删除
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/controller/bus/BusController.java:[55,55] com.sun.org.apache.xerces.internal.impl.dv.util.Base64是内部专用 API, 可能会在未来发行版中删除
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/controller/poi/PoiController.java:[1748,68] com.sun.org.apache.xerces.internal.impl.dv.util.Base64是内部专用 API, 可能会在未来发行版中删除
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/controller/road/RoadController.java:[3582,68] com.sun.org.apache.xerces.internal.impl.dv.util.Base64是内部专用 API, 可能会在未来发行版中删除
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/controller/bus/BusController.java:[597,68] com.sun.org.apache.xerces.internal.impl.dv.util.Base64是内部专用 API, 可能会在未来发行版中删除
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/service/common/PageService.java: 某些输入文件使用了未经检查或不安全的操作。
[WARNING] /Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/java/com/autonavi/bugmanager/service/common/PageService.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ BUGManager_maven ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ BUGManager_maven ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ BUGManager_maven ---
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ BUGManager_maven ---
[INFO] Packaging webapp
[INFO] Assembling webapp [BUGManager_maven] in [/Users/xiaolong/Documents/workspace/BUGManager_maven/target/BUGManager_maven-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [/Users/xiaolong/Documents/workspace/BUGManager_maven/src/main/webapp]
[INFO] Webapp assembled in [945 msecs]
[INFO] Building war: /Users/xiaolong/Documents/workspace/BUGManager_maven/target/BUGManager_maven-0.0.1-SNAPSHOT.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ BUGManager_maven ---
[INFO] Installing /Users/xiaolong/Documents/workspace/BUGManager_maven/target/BUGManager_maven-0.0.1-SNAPSHOT.war to /Users/xiaolong/Documents/repository/m2/repository/com/autonavi/rus/BUGManager_maven/0.0.1-SNAPSHOT/BUGManager_maven-0.0.1-SNAPSHOT.war
[INFO] Installing /Users/xiaolong/Documents/workspace/BUGManager_maven/pom.xml to /Users/xiaolong/Documents/repository/m2/repository/com/autonavi/rus/BUGManager_maven/0.0.1-SNAPSHOT/BUGManager_maven-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.861 s
[INFO] Finished at: 2016-01-23T16:01:10+08:00
[INFO] Final Memory: 34M/285M
[INFO] ------------------------------------------------------------------------
localhost:BUGManager_maven dddd$
出现错误后,查找正确的jar包,即可。
下面介绍我使用的运行方式:jetty运行。
首先在POM中添加jetty插件:
org.mortbay.jetty
maven-jetty-plugin
6.1.26
${basedir}/src/main/webapp
在工程上,单击鼠标右键,点击Rus As—>Maven Build… ,并在Goals中输入命令:jetty:run
点击RUN,可以成功启动maven web项目。
之前写的一篇文章《 Maven Web工程运行异常:Maven.multiModuleProjectDirectory system propery is not set的问题》介绍了jetty运行中可能碰到的问题,供参考。
到目前为止,Java Web项目转Maven工程大功告成!