Maven命令詳解 模組匯入 MyEclipse + Maven開發Web工程的詳細配置過程
一:Maven命令解釋:
mvn compile:編譯
mvn test:測試
mvn clean:清空,會去除掉target檔案(報告檔案,一些錯誤資訊會在這裡面)。
mvn package:打包(會將我們的專案打包成一個jar包這個jar包同樣可以配置到pom.xml中供其他專案使用)(專案中引入模組很有用)
mvn install:將自己的專案打包放到maven倉庫中,可以供其他專案引用。
//以下兩項一般只有在手動建立專案時需要使用
mvn archetypes:generate會下載相應的骨架資訊,自己選擇所需要的骨架,然後按提示輸入groupId和artifactid和版本號和包名即可完成maven專案的自動建立
這個命令也可以一次性全部使用,例如:
mvn arcgetype:generate -DgroupId=com.trs.xingcheng -DartifactId=xingcheng -Dversion=0.0.1 -SNAPSHOT
舉例說明install:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 這裡命名稍微有點不對:groupId一般寫我們的專案加公司域名倒過來寫-->
<groupId>com.trs</groupId>
<!--專案中的塊檔案-->
<artifactId>xingcheng</artifactId>
<version>0.0.1-SNAPSHOT</version>
以上是我的專案配置檔案:
執行install之後在本地maven倉庫中可以找到.com.trs.xingcheng資料夾,其中包含如下檔案
(1)0.0.1-SNAPSHOT資料夾:我的專案版本:這其中包含_remote.repositories檔案,xingcheng-0.0.1-SNAPSHOT.jar,xingcheng-0.0.1-SNAPSHOT.pom,maven-metadata-local.xml
解釋:xingcheng-0.0.1-SNAPSHOT.pom這個檔案就是你專案的pom.xml,這裡面配置了所有該專案需要的包,這也就解釋了maven引入某包時會將依賴的包一同匯入的原因。
(2)maven-metadata-local.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.trs</groupId>
<artifactId>xingcheng</artifactId>
<versioning>
<versions>
<version>0.0.1-SNAPSHOT</version>
</versions>
<lastUpdated>20131116021813</lastUpdated>
</versioning>
</metadata>
二:maven中的隱藏名稱:
${basedir}:專案根目錄
${project.build.directory}:構建目錄,預設為target
${project.build.outputDirectory}:構建過程輸出目錄,預設為target/classess
${project.build.finalName}產出物名稱,預設為${project.artifactId}-${project.version}
${project.packaging}打包型別,預設為jar
${project.xxx}當前pom檔案的任意節點內容,例如:想得到groupId可以${project.groupId},得到專案版本號可以使用${project.version}
使用例子:模組匯入
<dependency>
<groupId>${project.groupId}</groupId>
<!--以下引入的是該專案的一個模組專案,它和當前專案屬於同一專案,有相同的groupId-->
<artifactId>user-log</artifactId>
<!--當前專案的版本號-->
<version>${project.version}</version>
</dependency>
<!--以上配置可以將該日誌模組專案匯入到當前模組中,並且會將該專案所需要的所有依賴的包匯入到當前模組。注意(引入的那個模組需要利用clean install命令打包,這樣才可以利用maven的pom配置匯入如果是利用clean package打包的話,引入該專案後還需手動講該日誌模組所需要的包匯入的當前專案的lib資料夾中不然會由於缺少包而報錯,而這樣做會失去了maven管理jar包的價值,所以建議用clean install命令生成包到本地的maven倉庫中)-->
三:maven的配置中的<scope></scope>詳解
(1)scope的預設值是compile,指的是編譯時依賴,即編譯時就會將依賴包下載到maven倉庫中(預設值,適用於所有階段,會隨著專案一起釋出)
(2)test:只有在測試的時候會依賴這個包,即打包的時候不會將配置為test的junit包加進去。(只在測試時使用,用於編譯和執行測試程式碼。不會隨專案釋出)
test項的包只對test原始檔下的類起作用,如果將junit的程式碼放到src下,而junit配置為test將會出現找不到junit包的錯誤。
(3)provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。
(4)runtime,只在執行時使用,如JDBC驅動,適用執行和測試階段。
(5)system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查詢它。
================================================================================================================
四:傳遞依賴或說間接依賴:
例如:A專案依賴L專案版本1.1 直接依賴
B專案依賴L專案版本1.2 直接依賴
C專案依賴專案A和專案B 間接依賴
maven包中匯入的將是先配置的專案中依賴的包,即如果專案C配置中先依賴A,再依賴B,則匯入的L版本將是1.1
以上是在依賴級別相同的情況下的依賴關係,如果依賴級別不容的話,將會依賴於依賴級別高的專案。例如:A依賴D D依賴L的1.1,則C依賴L的1.2
通過這個原理可以通過在高級別中依賴新版本來遮蔽間接依賴中的舊版本。
五:排除依賴
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
注意將這對配置放在最高版本的dependency中這樣就只引入最高版本的專案,而可以排除其他版本的依賴。
可以用來解決包衝突問題。
六:聚合(模組管理):
(1)模組編譯的聚合:簡述:當一個專案以模組的形式開發的,即每一層或每一種功能放入在一個模組中開發,例如:將dao和service和action和log等分別放在不同的開發模組中開發,這樣這個
專案就由這麼多模組組成,這樣編譯專案時每次都需要將所有模組編譯一次,這樣非常麻煩,為了解決這個問題我們可以在這些模組的根目錄即工程目錄下建立一個pom.xml檔案來管理整個工程。或者利用eclipse建立一個新的maven專案,在選擇package時不要選擇jar和war,我們選擇pom型別即可。
在新專案的pom中加上聚合配置:
<!--匯入了三個模組,把這三個模組聚合在一起-->
<modules>
<module>../模組一<module>
<module>../模組二< module>
<module>../模組二< module>
</modules>
這樣就只需要對這個聚合專案進行clean操作就可以完成所有模組的clean操作,操作結果時所有模組下的target下的檔案都沒了(注意操作後重新整理模組)。
(2)a:整合:聚合模組聚合共有的pom(非dependency,是一些其他配置如properties,url)
即將各個聚合模組中共同的pom配置提取出來放到一個新的pom的maven工程中進行統一配置,再讓各個模組繼承該聚合模組即可。
繼承配置如下:在每個模組的頭部的<modelVersion></modelVersion>配置下新增如下配置:
<parent>
<groupId>專案的groupId</groupId>
<artifactId>parent</artifactId>
<version></version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
b:聚合模組聚合不共有的pom(dependency的聚合)
即可以將各個模組中的dependency放到pom管理模組中配置,在其中加上
<dependencyManagement>
<dependencies>
<!--以下放置各個模組中的dependency-->
</dependencies>
<dependencyManagement>
配置完這個後在各個模組中原有的dependency配置就只需要配置groupId和artifactId即可。
通過以上配置可看到聚合的配置很像整合,所以可以把聚合專案中的配置放到整合專案中來完成。
當然也可以將配置完後的pom直接放到工程中,這樣就可以少掉一個專案,放過去之後需要改動下配置如各個子模組中的<parent>下的<relativePath>中的路徑需要修改和聚合中的<modules>中<module>中的路徑等。
七:版本號講解
x.x.x里程碑的版本即有大的變化即第一個x代表的版本例如struts1和struts2,包含這些SNAPSHOT(快照版還在開發中的版本),alpha內部的測試版本,beta測試版本使用人員起初用的版本,Release版本(RC)釋放版本,GA(可靠版本)。
八:倉庫問題:依賴包的寧一個倉庫nexus sonatype管理。這個在多個模組管理中有一定作用,沒使用到,所以暫時沒具體研究。好像是收費的,免費版現在不更新了,不過可以下載免費版學習下。用到了再做補充。23
九:Maven的生命週期clean compile site
1.clean包含三個步驟pre-clean執行一些需要在clean之前完成的工作,clean:移除所有上一次構建生成的檔案,post-clean執行一些需要在clean之後立刻完成的工作。
2.compile:
validate
generate-sources
process-sources
generate-resources
process-resources複製並處理原始檔,至目標目錄,準備打包。
compile編譯專案的原始碼。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources複製並處理原始檔,至目標測試目錄
test-compile編譯測試原始碼
process-test-classes
test使用合適的單元測試框架執行測試。這些測試程式碼不會被打包或部署。
prepare-package
package接受編譯好的程式碼,打包成可釋出的格式,如JAR
pre-intergration-test
intergration-test
post-intergration-test
verify
install將包安裝到本地倉庫,以讓其他專案依賴。
deploy將最終的包複製到遠端倉庫,以讓其他開發人員與專案共享。
site
pom.xml詳解文章推薦:http://www.blogjava.net/jianyue/articles/227932.html
springmvc+spring+hibernate+maven的pomhttp://www.myexception.cn/vc-mfc/1267158.html
MyEclipse + Maven開發Web工程的詳細配置過程
好久沒做Web方面的開發,今天突然想弄弄SpringMVC,因為不久前又學了點Maven覺得非常好,所以在弄SpringMVC這個Web框架時想使用Maven來做,但是問題又來了,我一直是在Eclipse中使用Maven,而我以前一直用MyEclipse做Web開發(在Eclipse中做web開發個人認為一點都沒MyEclipse方便,在MyEclipse中可以直接使用Tomcat除錯,很是方便),那麼怎樣才能既使用MyEclipse又能使用Maven呢,今天作了一翻"搗鼓",寫了這篇文章。
就一步一步寫來吧:
1. 使用Maven建立webapp工程----原因是使用Maven時一般需要遵循一定的目錄結構,雖然也可以使用不同的目錄結構,但目前還不熟悉如何修改pom.xml檔案達到目的,而且修改太多預設配置對maven來說也不好。
建立方法,在一個目錄下使用命令:mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp。按照提示輸入相應的引數,中間過程如下:
C程式碼- D:\study\workspace4>mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
- [INFO] Scanning for projects...
- ....
- [INFO] Generating project in Interactive mode
- Define value for property 'groupId': : com.xjd
- Define value for property 'artifactId': : mywebapp
- Define value for property 'version': 1.0-SNAPSHOT: :
- Define value for property 'package': com.xjd: :
- Confirm properties configuration:
- groupId: com.xjd
- artifactId: mywebapp
- version: 1.0-SNAPSHOT
- package: com.xjd
- Y: : Y
- ....
- [INFO] BUILD SUCCESS
- [INFO] -----------------------------------------
- [INFO] Total time: 1:46.199s
- [INFO] Finished at: Wed Nov 09 15:02:18 CST 2011
- [INFO] Final Memory: 6M/15M
D:\study\workspace4>mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp [INFO] Scanning for projects... .... [INFO] Generating project in Interactive mode Define value for property 'groupId': : com.xjd Define value for property 'artifactId': : mywebapp Define value for property 'version': 1.0-SNAPSHOT: : Define value for property 'package': com.xjd: : Confirm properties configuration: groupId: com.xjd artifactId: mywebapp version: 1.0-SNAPSHOT package: com.xjd Y: : Y .... [INFO] BUILD SUCCESS [INFO] ----------------------------------------- [INFO] Total time: 1:46.199s [INFO] Finished at: Wed Nov 09 15:02:18 CST 2011 [INFO] Final Memory: 6M/15M
最後在資料夾下建立了一個Maven的webapp工程,該工程的資料夾根目錄下"mywebapp"(請檢視上面的過程),該目錄的結構為
Java程式碼- mywebapp
- +---pom.xml
- +---src
- +---main
- +---resources
- +---webapp
- +---index.jsp
- +---WEB-INF
- +---web.xml
mywebapp
+---pom.xml
+---src
+---main
+---resources
+---webapp
+---index.jsp
+---WEB-INF
+---web.xml
2. 啟用配置MyEclipse的Maven外掛---我使用的是MyEclipse8.5,它本身就帶有一個叫Maven4MyEclipse的外掛,只需要啟用和配置一下即可。
啟用方法:window-->preference-->MyEclipse-->Maven4MyEclipse, 勾選複選框(Enable Mave4MyEclipse features)。
配置方法:就在啟用方法開啟的節點下,有一個Maven節點,展開這個節點,主要配置其下的兩個節點,如下:
Installations: 這一個節點預設使用內建的maven,我們需要使用我們安裝的maven,點"add",新增一個我們外部安裝的maven即可,注意新增後就勾選上。
User Settings: 預設的是C盤使用者目錄下的.m2/settings.xml檔案,這裡要配置外部安裝的maven使用的配置檔案,如我使用的就是maven安裝目錄下的conf/settings.xml檔案,選擇之後別忘了點選一下,下方的"Update Settings"按鈕。
3. 用MyEclipse匯入Maven建立的工程:
匯入有兩種方法這裡分步講解:
1) 使用MyEclipse的普通工程匯入,步驟如下:
1> 先開啟dos,在工程根目錄下(mywebapp)執行: mvn eclipse:eclipse---執行完後會發現在工程目錄下多出了兩個檔案.classpath和.project,這是eclipse的工程檔案,當然myeclipse也識別
2> 在MyEclipse中使用匯入功能,選擇File-->Import...-->Existing Projects into workspace,選擇工程目錄,匯入即可
3> 關聯Maven,匯入後的工程只是一個普通java的工程,並不會與maven外掛相關連,此時在工程上點選右鍵-->Maven4MyEclipse-->Enable Dependency Management,這樣,這個工程就與Maven外掛關聯了(關聯後工程根節點左上角上會有一個M的標識)。
2)使用MyEclipse中的Maven工程匯入,步驟如下:
1> 在MyEclipse中使用匯入功能,選擇File-->Import...-->Existing Maven Projects(這裡不同),選擇工程目錄,匯入即可。---這裡匯入進,MyEclipse可能會聯網更新索引,很慢,我們可以取消(在Progress面板中點那個大紅框),這時工程導進來了,但是沒有執行該有的操作,比如maven的dependcy檢查等,此時進行一下第2步操作。
2> 更新一下工程配置,右鍵工程-->Maven4MyEclipse-->Update Project Configuration
4. 補全工程的目錄結構,第1步中生成的maven工程目錄是不全的,比如我們的java程式碼,我們的測試目錄等,現手動建立,和補全為如下:
C程式碼- mywebapp
- +---pom.xml
- +---src
- +---main
- +---resources
- +---java <<新增
- +---webapp
- +---index.jsp
- +---WEB-INF
- +---web.xml
- +---test <<新增
- +---resources <<新增
- +---java <<新增
- +---target <<eclipse自動新增
- +---classes <<eclipse自動新增
- +---test-classes <<eclipse自動新增
mywebapp +---pom.xml +---src +---main +---resources +---java <<新增 +---webapp +---index.jsp +---WEB-INF +---web.xml +---test <<新增 +---resources <<新增 +---java <<新增 +---target <<eclipse自動新增 +---classes <<eclipse自動新增 +---test-classes <<eclipse自動新增
截圖:
5. 增加MyEclipse的Web Project功能
到目前為止,我們僅僅是把一個Maven的webapp匯入到了MyEclipse中,然而在MyEclipse中,這還僅僅是一個Java普通的Maven工程,這一步我們就要為其新增MyEclipse的web project特性。
選擇工程-->MyEclipse-->Project Capabilities-->Add Web Project Capabilites,彈出視窗中設定引數如下,再接下來的彈出視窗中選擇yes。這樣我們的工程就是web工程了(注意工程圖示有變化,而且MyEclipse自動依賴了JEE的包)。
6. 配置工程屬性,開啟工程屬性面板---這一步很重要,都是些細節配置,缺一不可啊
1) Java Build Path
1> Source
新增src/main/java, src/test/java, src/test/resources為source folder, 這裡就不需要詳述了吧,點"add folder"就行。
最小面的"default output folder"修改為"mywebapp/src/main/webapp/WEB-INF/classes"---這點很重要
修改這些source folder的輸出目錄,其中main/java和main/resources輸出到default output folder, 而test/java和test/resources輸出到target/test-classes中,(如何修改---點選各節點下的Output Folder, 再點右邊的edit按鈕就行了)最後設定結果如下:
2> Order And Export
為了顯示好看,調整一下顯示順序,不細說了,很簡單,看下圖:
2)Java Compiler
注意到上面的圖片中,我的工程顯示jdk為1.4,所以要修改成我們想要的版本,這裡就不詳述了,應該都會改。
3) Myeclipse-->Web 這一個是用來修改設定工程的web特性的,如下圖: 好了,一個MyEclipse的Web Project + Maven webapp的工程就建好了。剩下的就是在myeclipse中開發和除錯web最後用maven打包,當然一定要使用maven的依賴特性(把要依賴的jar包直接在pom.xml中加入,然後重新整理工程就會自動匯入)。