1. 程式人生 > >java web專案轉成maven工程的步驟

java web專案轉成maven工程的步驟

  1. 背景

最近接到通知,阿里集團統一要求把歷史專案遷移到阿里生產環境中來,而咱手頭這個專案是2012年的老專案,普通java web工程,不能部署進生產環境,得把這個工程轉為maven工程。本篇文章記錄了java web工程轉為maven工程的整個紀錄。

  1. 前期準備工作

2.1. 建立maven web工程

首先建立maven project專案,點選next按鈕

然後勾選上Create a simple project (skip archetype selection)—不使用原型骨架。點選next按鈕

Packaging方式選擇war,點選finish按鈕

由於打包方式為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

接著重新指定一個web的路徑,點選add

選擇Folder –> next

在src下找到webapp目錄,然後finish

最後一步,我們要把當前的build path 指向 Maven Dependency, 直接點選add,選擇Java Build Path Entries 然後next

然後再點選finish完成

點選OK,結束。到目前為止,一個maven web專案搭建完成

2.2. Java Web工程相應資料夾拷貝至maven工程相應資料夾

首先來看看java web工程的結構

2.2.1. 拷貝java檔案

把java web工程 Java Resources目錄下的src目錄下的java檔案都拷貝到maven工程中的Java Resources目錄src/main/java目錄下面

2.2.2. 拷貝配置檔案

把java web工程 Java Resources目錄下的conf目錄下的xml配置檔案都拷貝到maven工程中的Java Resources目錄src/main/resources目錄下面

2.2.3. 拷貝web檔案

把java web工程 Web Root目錄下所有檔案檔案如下:

把java web工程 Web Root目錄下所有檔案檔案都拷貝到maven工程中的webapp目錄下面

到目前為止,java web專案轉Maven專案的檔案遷移工作全部完成,接下來要做的是個細活,體力活,把java web專案所有引用jar包,都加入到maven pom依賴中來。

  1. 新增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
1
其中-Dfile填寫源jar包所在路徑,執行上述命令會自動把jar包新增至你本地的maven倉庫。

  1. 過程中碰到的問題

在執行maven工程時會碰到不少問題,大都是maven依賴的引用問題:jar包引用錯誤。

可以通過下面命令來檢查:

mvn clean install
1
下面是我排除錯誤後,檢查成功的結果:

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

  1. 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

點選RUN,可以成功啟動maven web專案。

之前寫的一篇文章《 Maven Web工程執行異常:Maven.multiModuleProjectDirectory system propery is not set的問題》介紹了jetty執行中可能碰到的問題,供參考。

到目前為止,Java Web專案轉Maven工程大功告成!

使用maven建立javaWeb專案及執行web專案
1.新建一個Maven Project 選擇Maven Project 選擇maven-archetype-webapp Group Id是專案組織唯一的識別符號,實際對應 Java 的包…