剛剛完成了一個将已有的工程分解成三個子工程的任務,在網上查資料遇到了無數的坑,終于自己都填完了。 PS:這個工程使用的是Spring架構。
這是四個工程的結構:
這個任務的最終目标是:分解好後使用Nginx将不同的請求分發到單獨的工程中,使用Hazelcast分享session資料,這樣就将一個工程分解成了四個,降低了系統間的耦合。
首先要明白,不要在意網上說的 動态工程(Dynamic Web Module)! 現在建起來的基本都是動态工程,随便向tomcat裡發,隻要選擇webapp就可以。 使用JDK1.6打包,經常會出現 jvm堆溢出的錯誤,如果java類過多,如何更改編譯使用的記憶體都沒辦法消除這個錯誤。不過如果更改JDK版本使用1.7或1.8則會沒事。 更改maven工程有使用的JDK 有三個位置,這 三個位置的JDK版本一定要保持一緻
項目--右鍵--屬性-->
Java Build Path--檢視jdk版本
Java Compiler -- 檢視版本
Project Facets -- 檢視java版本
1.建立工程 建立一個maven project proA(Myeclipse裡有兩個Maven project選項,選擇哪個都一樣),三個Maven module,我嘗試的方法中隻有這樣才能使proA 作為三個modules的parent。 四個項目都要選擇webapp( 在建立Maven Project 如果出不來可選擇Maven項目,稍等即可,這是在和網絡上進行同步。) 因為我隻是拆開工程,建好之後隻要将src下的檔案導入到的main/java中,工程名下的所有檔案拷入到main/webapp(隻要這樣就可以,不需要test下也有相同的結構,有沒有test也無所謂),拷完之後記得改web.xml裡面使用的工程名。 建立proA後,要先将proA的pom.xml裡面的packing改為pom,這樣才可以使proA成為其餘三個的父親
<packaging>pom</packaging>
2.打包:
Maven打包時的jvm參數修改
在pom裡增加如下的build内容,這樣使maven在編譯時可以使用本地的jar包
<build> <finalName>bpfactory</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> <compilerArguments> <extdirs>src\main\webapp\WEB-INF\lib</extdirs> </compilerArguments> </configuration> </plugin> </plugins> </build>
如果提示javax不存在的話就将tomcat目錄下lib裡的servlet-api.jar放入JDK目錄下的\jre\lib\ext檔案夾中。
因為web工程和waven工程不一樣,是以我建議直接将編譯目錄改為target/dcase/WEB-INF/classes,這樣編譯的class直接放入了工程中。這樣再build就隻是一個複制的過程。 最後,按我的方式打包使用build就可以
因為隻研究了一個星期,隻涉及了工程搭建,沒有涉及到jar包的繼承和各種花式打包。老闆說他有一萬種方式給工程更新,是以o(╯□╰)o
個人覺得maven在自動打包這方面的來說挺好的, 然後用它管理多項目工程,一次更新處處有效,這樣的确可以帶來很好的管理模式。不過如果隻是快速搭建工程,沒有這個必要。