1. 程式人生 > >maven學習筆記之IDEA+Maven+Jetty執行一個簡單的web專案

maven學習筆記之IDEA+Maven+Jetty執行一個簡單的web專案

maven學習筆記

一、什麼是maven

Maven是一個專案管理工具,它包含了一個專案物件模型 (Project Object Model),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來執行定義在生命週期階段(phase)中外掛(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明確定義的專案物件模型來描述你的專案,然後Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)外掛。簡而言之,Maven是一個跨平臺的專案管理工具。主要服務於基於Java平臺的專案構建、依賴管理和專案資訊管理。

二、下載和安裝Maven

訪問Maven的下載頁面:http://maven.apache.org/download.html,其中包含針對不同

平臺的各種版本的Maven下載檔案。對於首次接觸Maven的讀者來說,推薦使用Maven

3.0,因此下載apache-maven-3.0-bin.zip


將安裝檔案解壓到你指定的目錄;

下一步就是設定環境變數,將 Maven安裝配置到作業系統環境中。

開啟系統屬性面板(桌面上右鍵單擊我的電腦”→“屬性),點選高階系統設定,再點選環境變數,在系統變數中新建一個變數,變數名為 M2_HOME,變數值為 Maven 的安裝目錄 (例如:D:\bin\apache-maven-3.0

)。點選確定,接著在系統變數中找到一個名為 Path 的變數,在變數值的末尾加上%M2_HOME%\bin;,注意多個值之間需要有分號隔開,然後點選確定。至此,環境變數設定完成。

這裡需要提一下的是 Path 環境變數,當我們在 cmd 中輸入命令時,Windows 首先會在當前目錄中尋找可執行檔案或指令碼,如果沒有找到,Windows 會接著遍歷環境變數 Path 中定義的路徑。由於我們將%M2_HOME%\bin 新增到了 Path 中,而這裡%M2_HOME%實際上是引用了我們前面定義的另一個變數,其值是 Maven 的安裝目錄。因此,Windows 會在執行命令時搜尋目錄D:\bin\apache-maven-3.0\bin

,而 mvn 執行指令碼的位置就是這裡。

開啟黑視窗,檢查我們是否安裝mvn成功。


這就代表Maven安裝成功.

第一條命令echo %M2_HOME%用來檢查環境變數是否指向了正確的Maven安裝目錄;而mvn -v執行了第一條 Maven命令,以檢查Windows 是否可以找到正確的mvn執行指令碼。


q Bin:該目錄包含了 mvn 執行的指令碼,這些指令碼用來配置 Java 命令,準備好classpath 和相關的 Java 系統屬性,然後執行 Java 命令。其中 mvn 是基於 UNIX 平臺的 shell 指令碼,mvn.bat是基於 Windows 平臺的 bat 指令碼。在命令列輸入任何一條 mvn 命令時,實際上就是在呼叫這些指令碼。該目錄還包含了 mvnDebug mvnDebug.bat 兩個檔案,同樣,前者是 UNIX 平臺的 shell 指令碼,後者是 windowsbat 指令碼。那麼 mvn mvnDebug 有什麼區別和關係呢?開啟檔案我們就可以看到,兩者基本是一樣的,只是 mvnDebug 多了一條 MAVEN_DEBUG_OPTS 配置,作用就是在執行 Maven 時開啟 debug,以便除錯 Maven 本身。此外,該目錄還包含 m2.conf 檔案,這是classworlds 的配置檔案。

q Boot: 該目錄只包含一個檔案,以maven 3.0 為例,該檔案為plexus-classworlds-2.2.3.jarplexus-classworlds是一個類載入器框架,相對於預設的java類載入器,它提供了更豐富的語法以方便配置,Maven使用該框架載入自己的類庫。更多關於classworlds的資訊請參考 http://classworlds.codehaus.org/。對於一般的Maven使用者來說,不必關心該檔案。

q Conf: 該目錄包含了一個非常重要的檔案 settings.xml。直接修改該檔案,就能在機器上全域性地定製 Maven 的行為。一般情況下,我們更偏向於複製該檔案至~/.m2/目錄下(這裡~表示使用者目錄),然後修改該檔案,在使用者範圍定製 Maven的行為。本書的後面將會多次提到該 settings.xml,並逐步分析其中的各個元素。

q  Lib: 該目錄包含了所有 Maven 執行時需要的 Java 類庫,Maven 本身是分模組開發的,因此使用者能看到諸如 mavn-core-3.0.jarmaven-model-3.0.jar 之類的檔案,此外這裡還包含一些 Maven 用到的第三方依賴如 common-cli-1.2.jargoogle-collection-1.0.jar 等等。(對於 Maven 2 來說,該目錄只包含一個如 maven-2.2.1-uber.jar 的檔案原本各為獨立 JAR 檔案的 Maven 模組和第三方類庫都被拆解後重新合併到了這個 JAR 檔案中)。可以說,這個 lib 目錄就是真正的 Maven。關於該檔案,還有一點值得一提的是,使用者可以在這個目錄中找到 Maven 內建的超級POM。其他: LICENSE.txt 記錄了 Maven 使用的軟體許可證 Apache License Version 2.0NOTICE.txt 記錄了 Maven 包含的第三方軟體;而 README.txt 則包含了 Maven 的簡要介紹,包括安裝需求及如何安裝的簡要指令等等。

關於~/.m2

預設情況下,~/.m2 目錄下除了 repository 倉庫之外就沒有其他目錄和檔案了,不過大多數 Maven 使用者需要複製 M2_HOME/conf/settings.xml 檔案到~/.m2/settings.xml。這是一條最佳實踐。

預設情況下,該資料夾下放置了Maven本地倉庫.m2/repository。所有的Maven的構件都被儲存到該倉庫中,以方便重用。

四、在IDEA上編寫一個簡單的maven專案

新建一個工程,選擇Maven,project 選擇本地的jdk,下面Create from archetype,一定要勾選,然後選擇下面(本截圖最後一行)的-webapp


next,然後對GroupIdArtifactId,分別寫上自己的專案組名和專案名。groupId 定義了專案屬於哪個組,這個組往往和專案所在的組織或公司存在關聯,譬如你在 googlecode 上 建 立 了 一 個 名 為 myapp 的 項 目 , 那 麼 groupId 就 應 該 是com.googlecode.myapp,如果你的公司是 mycom,有一個專案為 myapp,那麼 groupId 就應該是 com.mycom.myapp。本書中所有的程式碼都基於 groupId com.juvenxu.mvnbook。artifactId 定義了當前 Maven 專案在組中唯一的 ID,我們為這個 Hello World 專案定義artifactId 為 hello-world,本書其他章節程式碼會被分配其他的 artifactId。而在前面的groupId 為 com.googlecode.myapp 的例子中,你可能會為不同的子專案(模組)分配artifactId,如:myapp-utilmyapp-domainmyapp-web 等等。


Maven的setting檔案和本地倉庫地址reporitory。為了讓專案在建立的時候可以快速構建,需要在Properties增加引數:archetypeCatalog=internal,這個引數的意思是外掛使用內部的archetype元資料,如果不加該引數,則預設從remote中央倉庫下載,這樣會導致構建很慢,而且有可能構建失敗,這樣就只有一個pom.xml檔案,其餘的目錄結構都不會生成了。


            

Finish,出現以下的介面就代表完成Maven專案的建立成功。


對於最重要的pom.xml檔案中


最重要的是 groupIdartifactId version 三行,前面兩個剛剛在上面已經介紹過了, version也很容易懂得,指的當前的版本——1.0-SNAPSHOTSNAPSHOT 意為快照,說明該專案還處於開發中,是不穩定的版本。隨著專案的發展,version 會不斷更新,如升級為 1.01.1-SNAPSHOT1.12.0 等等。

最後一個 name 元素聲明瞭一個對於使用者更為友好的專案名稱,雖然這不是必須的,但還是推薦為每個 POM 宣告 name,以方便資訊交流。

五、Jetty外掛的安裝與使用


根據groupIdartifactId還有version,就可以下載自己所需要的外掛。因為Maven內建了一箇中央倉庫的地址(http://repo1.maven.org/maven2),該中央倉庫包含了世界上大部分流行的開源專案構

件,Maven會在需要的時候去那裡下載。

然後,在右側可以看到有Maven Project,點開裡面的Plugins,裡面有jetty,點開裡面的jettyrun,同時也可以create 一個test,.這樣以後就不用每次都點開去執行jetty了,而是可以直接點test來執行。


               

                

出現以下資訊,就代表我們jetty執行成功了,就可以去執行我們的web專案了。


六、執行WEB專案

mvn jetty:run預設啟動的是8080tomcat通常佔用這個埠,可以手動修改jetty外掛的啟動埠,命令如下:

                                                    mvn jetty:run -Djetty.port=9999 

另一種方法是修改pom檔案,jetty外掛部分程式碼如下:

<plugin> 
                <groupId>org.mortbay.jetty</groupId> 
                <artifactId>maven-jetty-plugin</artifactId> 
                <version>6.1.6</version> 
                <configuration> 
                    <connectors> 
                       <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> 
                            <port>9999</port> 
                            <maxIdleTime>60000</maxIdleTime> 
                        </connector> 
                    </connectors> 
                </configuration> 
 </plugin>


這個地方和Tomcat不一樣,不用在前面輸入工程名,因為預設的路徑直接到根目錄下。所以直接輸入就可訪問預設頁面,index.jsp頁面。

至此,我們一個簡單的Web專案,從下載Maven到安裝Jetty外掛,到得出jsp頁面就算完成了!

PS:圖片上的號不是我的QQ號,自動分配的一個數字。。。。然後就給我加上水印了,不明白為啥。。。。求贊!謝謝!