maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目
maven學(xué)習(xí)筆記
一、什么是maven
Maven是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型 (Project Object Model),一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周期(Project Lifecycle),一個(gè)依賴管理系統(tǒng)(Dependency Management System),和用來運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。當(dāng)你使用Maven的時(shí)候,你用一個(gè)明確定義的項(xiàng)目對(duì)象模型來描述你的項(xiàng)目,然后Maven可以應(yīng)用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。簡(jiǎn)而言之,Maven是一個(gè)跨平臺(tái)的項(xiàng)目管理工具。主要服務(wù)于基于Java平臺(tái)的項(xiàng)目構(gòu)建、依賴管理和項(xiàng)目信息管理。
二、下載和安裝Maven
訪問Maven的下載頁(yè)面:http://maven.apache.org/download.html,其中包含針對(duì)不同
平臺(tái)的各種版本的Maven下載文件。對(duì)于首次接觸Maven的讀者來說,推薦使用Maven
3.0,因此下載apache-maven-3.0-bin.zip。
將安裝文件解壓到你指定的目錄;
下一步就是設(shè)置環(huán)境變量,將 Maven安裝配置到操作系統(tǒng)環(huán)境中。
打開系統(tǒng)屬性面板(桌面上右鍵單擊“我的電腦”→“屬性”),點(diǎn)擊高級(jí)系統(tǒng)設(shè)置,再點(diǎn)擊環(huán)境變量,在系統(tǒng)變量中新建一個(gè)變量,變量名為 M2_HOME,變量值為 Maven 的安裝目錄 (例如:D:\bin\apache-maven-3.0)。點(diǎn)擊確定,接著在系統(tǒng)變量中找到一個(gè)名為 Path 的變量,在變量值的末尾加上%M2_HOME%\bin;,注意多個(gè)值之間需要有分號(hào)隔開,然后點(diǎn)擊確定。至此,環(huán)境變量設(shè)置完成。
這里需要提一下的是 Path 環(huán)境變量,當(dāng)我們?cè)?cmd 中輸入命令時(shí),Windows 首先會(huì)在當(dāng)前目錄中尋找可執(zhí)行文件或腳本,如果沒有找到,Windows 會(huì)接著遍歷環(huán)境變量 Path 中定義的路徑。由于我們將%M2_HOME%\bin 添加到了 Path 中,而這里%M2_HOME%實(shí)際上是引用了我們前面定義的另一個(gè)變量,其值是 Maven 的安裝目錄。因此,Windows 會(huì)在執(zhí)行命令時(shí)搜索目錄D:\bin\apache-maven-3.0\bin,而 mvn 執(zhí)行腳本的位置就是這里。
打開黑窗口,檢查我們是否安裝mvn成功。
這就代表Maven安裝成功.
第一條命令echo %M2_HOME%用來檢查環(huán)境變量是否指向了正確的Maven安裝目錄;而mvn -v執(zhí)行了第一條 Maven命令,以檢查Windows 是否可以找到正確的mvn執(zhí)行腳本。
q Bin:該目錄包含了 mvn 運(yùn)行的腳本,這些腳本用來配置 Java 命令,準(zhǔn)備好classpath 和相關(guān)的 Java 系統(tǒng)屬性,然后執(zhí)行 Java 命令。其中 mvn 是基于 UNIX 平臺(tái)的 shell 腳本,mvn.bat是基于 Windows 平臺(tái)的 bat 腳本。在命令行輸入任何一條 mvn 命令時(shí),實(shí)際上就是在調(diào)用這些腳本。該目錄還包含了 mvnDebug 和mvnDebug.bat 兩個(gè)文件,同樣,前者是 UNIX 平臺(tái)的 shell 腳本,后者是 windows的 bat 腳本。那么 mvn 和 mvnDebug 有什么區(qū)別和關(guān)系呢?打開文件我們就可以看到,兩者基本是一樣的,只是 mvnDebug 多了一條 MAVEN_DEBUG_OPTS 配置,作用就是在運(yùn)行 Maven 時(shí)開啟 debug,以便調(diào)試 Maven 本身。此外,該目錄還包含 m2.conf 文件,這是classworlds 的配置文件。
q Boot: 該目錄只包含一個(gè)文件,以maven 3.0 為例,該文件為plexus-classworlds-2.2.3.jar。plexus-classworlds是一個(gè)類加載器框架,相對(duì)于默認(rèn)的java類加載器,它提供了更豐富的語(yǔ)法以方便配置,Maven使用該框架加載自己的類庫(kù)。更多關(guān)于classworlds的信息請(qǐng)參考 http://classworlds.codehaus.org/。對(duì)于一般的Maven用戶來說,不必關(guān)心該文件。
q Conf: 該目錄包含了一個(gè)非常重要的文件 settings.xml。直接修改該文件,就能在機(jī)器上全局地定制 Maven 的行為。一般情況下,我們更偏向于復(fù)制該文件至~/.m2/目錄下(這里~表示用戶目錄),然后修改該文件,在用戶范圍定制 Maven的行為。本書的后面將會(huì)多次提到該 settings.xml,并逐步分析其中的各個(gè)元素。
q ?Lib: 該目錄包含了所有 Maven 運(yùn)行時(shí)需要的 Java 類庫(kù),Maven 本身是分模塊開發(fā)的,因此用戶能看到諸如 mavn-core-3.0.jar、maven-model-3.0.jar 之類的文件,此外這里還包含一些 Maven 用到的第三方依賴如 common-cli-1.2.jar、google-collection-1.0.jar 等等。(對(duì)于 Maven 2 來說,該目錄只包含一個(gè)如 maven-2.2.1-uber.jar 的文件原本各為獨(dú)立 JAR 文件的 Maven 模塊和第三方類庫(kù)都被拆解后重新合并到了這個(gè) JAR 文件中)。可以說,這個(gè) lib 目錄就是真正的 Maven。關(guān)于該文件,還有一點(diǎn)值得一提的是,用戶可以在這個(gè)目錄中找到 Maven 內(nèi)置的超級(jí)POM。其他: LICENSE.txt 記錄了 Maven 使用的軟件許可證 Apache License Version 2.0; NOTICE.txt 記錄了 Maven 包含的第三方軟件;而 README.txt 則包含了 Maven 的簡(jiǎn)要介紹,包括安裝需求及如何安裝的簡(jiǎn)要指令等等。
關(guān)于~/.m2:
默認(rèn)情況下,~/.m2 目錄下除了 repository 倉(cāng)庫(kù)之外就沒有其他目錄和文件了,不過大多數(shù) Maven 用戶需要復(fù)制 M2_HOME/conf/settings.xml 文件到~/.m2/settings.xml。這是一條最佳實(shí)踐。
默認(rèn)情況下,該文件夾下放置了Maven本地倉(cāng)庫(kù).m2/repository。所有的Maven的構(gòu)件都被存儲(chǔ)到該倉(cāng)庫(kù)中,以方便重用。
四、在IDEA上編寫一個(gè)簡(jiǎn)單的maven項(xiàng)目
新建一個(gè)工程,選擇Maven,project 選擇本地的jdk,下面Create from archetype,一定要勾選,然后選擇下面(本截圖最后一行)的-webapp。
點(diǎn)next,然后對(duì)GroupId和ArtifactId,分別寫上自己的項(xiàng)目組名和項(xiàng)目名。groupId 定義了項(xiàng)目屬于哪個(gè)組,這個(gè)組往往和項(xiàng)目所在的組織或公司存在關(guān)聯(lián),譬如你在 googlecode 上 建 立 了 一 個(gè) 名 為 myapp 的 項(xiàng) 目 , 那 么 groupId 就 應(yīng) 該 是com.googlecode.myapp,如果你的公司是 mycom,有一個(gè)項(xiàng)目為 myapp,那么 groupId 就應(yīng)該是 com.mycom.myapp。本書中所有的代碼都基于 groupId com.juvenxu.mvnbook。artifactId 定義了當(dāng)前 Maven 項(xiàng)目在組中唯一的 ID,我們?yōu)檫@個(gè) Hello World 項(xiàng)目定義artifactId 為 hello-world,本書其他章節(jié)代碼會(huì)被分配其他的 artifactId。而在前面的groupId 為 com.googlecode.myapp 的例子中,你可能會(huì)為不同的子項(xiàng)目(模塊)分配artifactId,如:myapp-util、myapp-domain、myapp-web 等等。
Maven的setting文件和本地倉(cāng)庫(kù)地址reporitory。為了讓項(xiàng)目在創(chuàng)建的時(shí)候可以快速構(gòu)建,需要在Properties增加參數(shù):archetypeCatalog=internal,這個(gè)參數(shù)的意思是插件使用內(nèi)部的archetype元數(shù)據(jù),如果不加該參數(shù),則默認(rèn)從remote中央倉(cāng)庫(kù)下載,這樣會(huì)導(dǎo)致構(gòu)建很慢,而且有可能構(gòu)建失敗,這樣就只有一個(gè)pom.xml文件,其余的目錄結(jié)構(gòu)都不會(huì)生成了。
????????????
點(diǎn)Finish,出現(xiàn)以下的界面就代表完成Maven項(xiàng)目的創(chuàng)建成功。
對(duì)于最重要的pom.xml文件中
最重要的是 groupId,artifactId 和 version 三行,前面兩個(gè)剛剛在上面已經(jīng)介紹過了, version也很容易懂得,指的當(dāng)前的版本——1.0-SNAPSHOT。SNAPSHOT 意為快照,說明該項(xiàng)目還處于開發(fā)中,是不穩(wěn)定的版本。隨著項(xiàng)目的發(fā)展,version 會(huì)不斷更新,如升級(jí)為 1.0、1.1-SNAPSHOT、1.1、2.0 等等。
最后一個(gè) name 元素聲明了一個(gè)對(duì)于用戶更為友好的項(xiàng)目名稱,雖然這不是必須的,但還是推薦為每個(gè) POM 聲明 name,以方便信息交流。
五、Jetty插件的安裝與使用
根據(jù)groupId和artifactId還有version,就可以下載自己所需要的插件。因?yàn)镸aven內(nèi)置了一個(gè)中央倉(cāng)庫(kù)的地址(http://repo1.maven.org/maven2),該中央倉(cāng)庫(kù)包含了世界上大部分流行的開源項(xiàng)目構(gòu)
件,Maven會(huì)在需要的時(shí)候去那里下載。
然后,在右側(cè)可以看到有Maven Project,點(diǎn)開里面的Plugins,里面有jetty,點(diǎn)開里面的jetty:run,同時(shí)也可以create 一個(gè)test,.這樣以后就不用每次都點(diǎn)開去運(yùn)行jetty了,而是可以直接點(diǎn)test來運(yùn)行。
???????????????
????????????????
出現(xiàn)以下信息,就代表我們jetty運(yùn)行成功了,就可以去運(yùn)行我們的web項(xiàng)目了。
六、運(yùn)行WEB項(xiàng)目
mvn jetty:run默認(rèn)啟動(dòng)的是8080端口,tomcat通常占用這個(gè)端口,可以手動(dòng)修改jetty插件的啟動(dòng)端口,命令如下:
????????????????????????????????????????????????????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 或者很少用就不用擔(dān)心端口占用問題了,可以直接在地址欄,輸入http://localhost:8080/index.jsp或者http://localhost:8080。
這個(gè)地方和Tomcat不一樣,不用在前面輸入工程名,因?yàn)槟J(rèn)的路徑直接到根目錄下。所以直接輸入就可訪問默認(rèn)頁(yè)面,index.jsp頁(yè)面。
至此,我們一個(gè)簡(jiǎn)單的Web項(xiàng)目,從下載Maven到安裝Jetty插件,到得出jsp頁(yè)面就算完成了!
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解java虚拟机 (三) 第二版
- 下一篇: Maven学习笔记(二)