有人喜歡把一個下載的spring3.1和struts1.3下載包裏的的lib目錄下全部的jar無論三七二十一所有copy到工程的WEB-INF\lib目錄下,有提示須要覆蓋他也就選個「ALL」。java
我曾看到過一個工程,沒幾個JSP,CLASS,工程達287mb之大,其中286mb爲jar文件,彼彼皆是log4j-1.3.8.jar,log4j-1.4.2.jar這樣的重複的jar文件的存在。web
有了junit3.8居然還發覺工程裏有junit4.x的包。。。暈啊。算法
MAVEN模式:spring
而使用maven構建工程時就不太會有這樣的事情發生了,你們初學者能夠把maven當作是一個「自動取包機」。怎麼解釋呢,舉個例子來講:tomcat
你要裝載a.jar,但a.jar依賴b.jar,而b.jar又依賴c.jar和d.jar,若是隻是2,3級的依賴關係構建者能夠記得住,但若是這個依賴關係達6級,7級以上時那麼按照傳統的構建模式當你發覺一個目錄裏有abcdefghijk這些個jar文件時,你通常爲了不出錯老是一古腦的把全部的jar文件copy進工程,對吧?服務器
但實際這些個jar文件裏只有a.jar,b.jar, c.jar纔是你須要的。app
而maven幹這個是它的特長,當你告訴maven你要下載a.jar文件時,它會發覺a.jar依賴於其它的jar文件,它就會把你指定的jar文件與相關的依賴文件所有拿下來,不會多拿(90%狀況下)。框架
就比如你要拿org.springframework.web.struts-3.0.0.RELEASE.jar這個文件,但其實它還須要用到asm,collection, bean-util等,那麼你只要告訴maven我要拿org.springframework.web.struts-3.0.0.RELEASE.jar這個文件,其它的依賴的相關的jar包會自動「下載」到你的工程中去.因此當我拿 maven從新去構建那個286mb的工程時,工程全部的功能一點不影響,靠着maven對jar包的自動依賴整個工程從286mb縮成了21mb,哈哈哈哈。。。。。。搞毛啊原來的那幫人在!eclipse
理解mavenjsp
請把如下幾個概念記住就好了:
1) maven是經過佈署在internet上的maven倉庫(開源免費)去拿你須要的jar包,所以建議你因該是在一個寬帶連網的環境下工做;
2) maven不是萬能,有時會多拿包,固然這種狀況不多但它會自動幫你把有依賴關係的包全拿到本地來的;
3) 因爲maven是經過internet去拿 你須要的jar包的,所以你的工程發佈能夠不用再把幾十mb的jar文件連同你的工程一塊兒發佈了,而只須要把一份「jar包使用清單」伴隨着你的工程一塊兒發佈就能夠了。當別人拿着你的maven工程時,它只要也裝有maven也能連入internet環境,它就能夠在佈署時自動把工程須要用到的jar包取下來而後佈署入j2ee服務器的。
4) 若是你所在的環境好比說一些公司不讓員工上網或者讓上網但不讓下載的,那麼這時你就須要創建本身的本地maven庫,即maven私服. 把全部的jar包經過正式的手段搞到後在你所在的環境的局域網內創建一臺maven服務器,把這些經過下載收集到的jar佈署到你的「私服」上去,再把工程的maven鏈接倉庫的url指向你本地的這臺私服就好了。
修改settings文件
<repositories> <repository> <id>Ibiblio</id> <name>Ibiblio</name> <url>http://www.ibiblio.org/maven/</url> </repository> <repository> <id>PlanetMirror</id> <name>Planet Mirror</name> <url>http://public.planetmirror.com/pub/maven/</url> </repository> </repositories>
由於maven默認的internet倉庫裏的文件不全,因此筆者爲你們提供兩個目前你們用得最多的maven的internet倉庫,由其是這個lbiblio的,基本全部的開源的框架的jar文件都有提供.
繼續看下去,看到proxies這段,把它放開來,改爲以下內容(若是你所在的環境是經過proxy上網的),要否則請保證這段proxies爲被註釋.
<proxies> <proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <username>username</username> <password>password</password> <host>proxy.mycompany.com</host> <port>8088</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy> </proxies>
若是你經過的proxy須要用戶名密碼的話不要忘了把用戶名密碼也設上,若是沒有用戶名密碼,請保持<username>爲username,<password>爲password。
解決包衝突,前面說了,Maven在絕大多數狀況下會保證你的依賴關係沒有問題,都會幫你下到本地的,可是此次咱們就碰到了一個問題。
用MavenPOM Editor打開咱們的pom.xml文件,切換到:DependencyHierarchy視圖
咱們能夠看到爲了知足spring-struts這個插件的應用(Spring+ Struts時用的),Maven多給咱們拿 一個struts包,所以致使咱們的工程中有兩個struts核心包,一個是1.2.9,一個是1.3.10,因爲struts1.3與struts1.2命名空間的不一樣,所以才產生了剛纔那個狗P錯誤。
右鍵單擊struts:1.2.9[compile],選ExcludeMaven Artifact後肯定並保存pom.xml文件,這步操做至關於咱們在原有的pom.xml文件中增長了這樣的一段描述:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-struts</artifactId> <version>3.1.0.RELEASE</version> <exclusions> <exclusion> <artifactId>struts</artifactId> <groupId>struts</groupId> </exclusion> </exclusions> </dependency>
如何讓Maven構建的工程在eclipse裏跑起來
可是,這個工程沒法在eclipse所內嵌的tomcat裏運行起來,這不便於咱們的調試。通常咱們開發人員都喜歡直接在eclipse裏點一下server的運行,而後在eclipse裏啓動起咱們的web工程,這樣出了錯也便於咱們調試,而不用每次改一個jsp或者一個java就從新構建,對吧。
在eclipse裏新增一個jdk的runtime
咱們在這邊設置的jdk把它的JREhome給定位到了JAVA_HOME\jre目錄下了,而不像上面的JDK1.6咱們的JREhome是定位到JAVA_HOME這一層目錄的,爲何?由於在使用jasypt時,eclipse wtp有一個bug就是在eclipse內運行tomcat時,有時會認不出PBEWITHMD5ANDDES這個加密算法,它會拋一個secret key notavailable的Exception,而你若是把你工程的JDK編譯環境定位到了JAVA_HOME\jre目錄下,它就能認得出,這是一個BUG,在eclipse的官方論壇中已經有提。
在eclipse裏設置tomcat
設完後你的工程會在server這個tab下多出一個Tomcat的項。
將alpha_mvn轉變成可在eclipse裏運行的工程
右鍵你的工程,選project fact,你會看到一個convert的超連接,點這個超連接。
勾選Dynamic Web Module與Java兩項
打開工程所在的eclipse workspace目錄下的.settings目錄如:C:\eclipsespace\alpha_mvn\.settings,看到一個叫「org.eclipse.wst.common.project.facet.core.xml」的文件如:
用純文本編輯工具打開它,把:
installedfacet="jst.web" version從3.0或者其它版本,改爲 2.5以下:
<installed facet="jst.web" version="2.5"/>
回到eclipse裏刷新工程,這時你的工程應該會多出一個目錄,WebContent,以下結構:
等等,等等。。。先別急着給我拷東西。
右鍵單擊工程,選properties,在Java Build Path裏選Order and Export這個Tab。
而後把Maven Dependencies給勾選上,按肯定。
再右鍵單擊工程選
看着這個mapping關係,本身用Add按鈕照圖來增長吧
記住:在AddMaven Dependencies時要選JavaBuild Path Entries。
其它的都用Folder來add,徹底按照這個mapping 關係來作。
作完後,右鍵單擊server,選」Add andRemove…」
在彈出對話框中把alpha_mvn經過Add>按鈕增長到右邊的Configured框中,Finish後
你會發覺原來的servers下的Tomcat已經掛載了咱們的工程,點右上角綠色的啓動按鈕,切換到Console窗口看輸出。
輸出無誤