Java Web工程转换为基于Maven的Web工程

转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50569603

  • 《Java Web工程转换为基于Maven的Web工程》
  • 《Maven Web工程运行异常:Maven.multiModuleProjectDirectory system propery is not set的问题》
  • 《Maven运行异常:Exception in thread “main” java.lang.UnsupportedClassVersionError》

1. 背景

最近接到通知,阿里集团统一要求把历史项目迁移到阿里生产环境中来,而咱手头这个项目是2012年的老项目,普通java web工程,不能部署进生产环境,得把这个工程转为maven工程。本篇文章记录了java web工程转为maven工程的整个纪录。

2. 前期准备工作

2.1. 创建maven web工程

首先创建maven project项目,点击next按钮
Java Web工程转换为基于Maven的Web工程_第1张图片

然后勾选上Create a simple project (skip archetype selection)—不使用原型骨架。点击next按钮
Java Web工程转换为基于Maven的Web工程_第2张图片

Packaging方式选择war,点击finish按钮
Java Web工程转换为基于Maven的Web工程_第3张图片

由于打包方式为war,所以main目录下多了一个webapp目录
Java Web工程转换为基于Maven的Web工程_第4张图片

由于我们的项目要使用eclipse发布到tomcat下面,这里我们需要先把项目转成dynamic web project

在我们的项目上点击右键,选择properties 并找到 Project Facets ,并点击Convert to faceted form… ,然后勾选Dynamic Web Module 如下图:
Java Web工程转换为基于Maven的Web工程_第5张图片

结果提示jdk要求java 1.6以上,回头看看maven项目的jdk版本是1.5的,如下图:
Java Web工程转换为基于Maven的Web工程_第6张图片

我们将其改为1.6,点击OK,同时将JRE library改为1.7,如下图:
Java Web工程转换为基于Maven的Web工程_第7张图片
Java Web工程转换为基于Maven的Web工程_第8张图片

同时把图中的java 1.4改为1.7,勾选Dynamic Web Module,点击OK按钮
Java Web工程转换为基于Maven的Web工程_第9张图片

来看下目前的项目结构,发现多了一个WebContent目录,但这不符合maven项目结构,因此还需要调整。
Java Web工程转换为基于Maven的Web工程_第10张图片

把WebContent中的两个目录WEB-INF和MATE-INF拷贝进web app目录里面,然后删除WebContent目录
Java Web工程转换为基于Maven的Web工程_第11张图片

那么现在的目录结构为
Java Web工程转换为基于Maven的Web工程_第12张图片

然后我们要修改发布规则,右键点击项目, 选择 Deployment Assembly
Java Web工程转换为基于Maven的Web工程_第13张图片

选择WebContent,把它remove掉,测试类我们也不需要发布,test的两个目录页可以remove
Java Web工程转换为基于Maven的Web工程_第14张图片

接着重新指定一个web的路径,点击add
Java Web工程转换为基于Maven的Web工程_第15张图片

选择Folder –> next
Java Web工程转换为基于Maven的Web工程_第16张图片

在src下找到webapp目录,然后finish
Java Web工程转换为基于Maven的Web工程_第17张图片

最后一步,我们要把当前的build path 指向 Maven Dependency, 直接点击add,选择Java Build Path Entries 然后next
Java Web工程转换为基于Maven的Web工程_第18张图片

然后再点击finish完成
Java Web工程转换为基于Maven的Web工程_第19张图片

点击OK,结束。到目前为止,一个maven web项目搭建完成
Java Web工程转换为基于Maven的Web工程_第20张图片

2.2. Java Web工程相应文件夹拷贝至maven工程相应文件夹

首先来看看java web工程的结构
Java Web工程转换为基于Maven的Web工程_第21张图片

2.2.1. 拷贝java文件

把java web工程 Java Resources目录下的src目录下的java文件都拷贝到maven工程中的Java Resources目录src/main/java目录下面
Java Web工程转换为基于Maven的Web工程_第22张图片

2.2.2. 拷贝配置文件

把java web工程 Java Resources目录下的conf目录下的xml配置文件都拷贝到maven工程中的Java Resources目录src/main/resources目录下面
Java Web工程转换为基于Maven的Web工程_第23张图片

2.2.3. 拷贝web文件

把java web工程 Web Root目录下所有文件文件如下:
Java Web工程转换为基于Maven的Web工程_第24张图片
把java web工程 Web Root目录下所有文件文件都拷贝到maven工程中的webapp目录下面
Java Web工程转换为基于Maven的Web工程_第25张图片

到目前为止,java web项目转Maven项目的文件迁移工作全部完成,接下来要做的是个细活,体力活,把java web项目所有引用jar包,都加入到maven pom依赖中来。

3. 添加POM依赖

首先需要去java web项目中查看都引用了哪些jar包,去java web工程 Java Resources目录下的Libraries查看:
Java Web工程转换为基于Maven的Web工程_第26张图片

上面只是截取了部分,其实很多,有七八十个jar包,这一个个查都得半天。不过除了一个一个查,也没有其他办法了。

这里我就介绍下如何查maven依赖,比如我要查commons-io-2.4.jar对应的maven 依赖
Java Web工程转换为基于Maven的Web工程_第27张图片

首先登录maven repository官网http://mvnrepository.com,搜索这个包,如下:
Java Web工程转换为基于Maven的Web工程_第28张图片

看见结果中有2.4这个版本,点击进去,copy红框中的结果,将其粘贴进pom,其他剩下的就是这样一个一个查,一个一个添加。
Java Web工程转换为基于Maven的Web工程_第29张图片

过程中可能会碰到这种情况,在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仓库。

4. 过程中碰到的问题

在运行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包,即可。

4. maven web运行方式

下面介绍我使用的运行方式:jetty运行。

首先在POM中添加jetty插件:


        
            
                org.mortbay.jetty
                maven-jetty-plugin
                6.1.26
                
                    ${basedir}/src/main/webapp
                
                                   
        
    

在工程上,单击鼠标右键,点击Rus As—>Maven Build… ,并在Goals中输入命令:jetty:run
Java Web工程转换为基于Maven的Web工程_第30张图片

点击RUN,可以成功启动maven web项目。

之前写的一篇文章《 Maven Web工程运行异常:Maven.multiModuleProjectDirectory system propery is not set的问题》介绍了jetty运行中可能碰到的问题,供参考。

到目前为止,Java Web项目转Maven工程大功告成!

你可能感兴趣的:(MAVEN)