首先看一下eclipse版本,我用的是最新版Mars2。
下載地址自行搜索關鍵字:“eclipse官網”即可,注意下版本,32bit or 64bit。
maven插件以及svn等相關插件安裝設置問題不在這里贅述,有時間的話會發布出來。
在這里說一下,第一、關於中文和英文的問題,雖然很多人表示看不懂英文,但是我不建議漢化eclipse,推薦原版,原版雖是英文但是單詞有限,習慣了就好了;第二、eclipse和myeclipse哪個更好用,我表示這兩個都是工具而已,不是很重要,起碼我不在意工具的種類。
接下來是這樣的
序號1:Create a simple project (skip archetype selection) :創建一個簡單的項目(跳過對原型模板的選擇)
序號2:User default Workspace location:使用本地默認的工作空間
Loaction:本地工作空間目錄
序號3:Add project(s) to working set :增加項目到工作集
Add project to working sets是起到了把項目分類的作用,把Project Explorer中的項目按類分組,避免Project Explorer中項目過多。如圖:
序號4:Advanced(高級)
resolve workspace projects(解決工作空間中的項目)
Profiles是maven的一個很關鍵的術語:profile是用來定義一些在build lifecycle中使用的environmental variations,profile可以設置成在不同的環境下激活不同的profile(例如:不同的OS激活不同的profile,不同的JVM激活不同的profile,不同的dabase激活不同的profile等等)。
Name template對應的是Eclipse中所創建Maven2項目的名稱,也就是你那個項目的groupId,artifcatId。
針對原型模板目前為止不是很了解,還有由於目前尚未用到高級屬性,所以不是很理解,懇請各位不吝賜教,我感激不盡。
在這里,我按照截圖所示,直接進行next。
select an archetype(選擇一個原型模板)
Catalog:Archetype Catalog下拉菜單有4個可供用戶選擇,分別是maven-archetype-plugin內置的Internal、本地倉庫的Default Local、m2eclipse下載到倉庫索引中包含的Nexus Indexer,以及所有這3個合並得到的All Catalogs。
Filter:對項目資源進行變量替換。
很多archetype.都是對應不同需求的maven模板,予選擇 maven-archetype-webapp一個基於web的模板。
這一塊的內容,予目前為止不甚了解,望各位不吝賜教,我感激不盡。
Group Id:組Id,針對一個項目的普遍唯一識別符。是項目組織唯一的標識符,實際對應JAVA的包的結構,是main目錄里java的目錄結構,相當於我們日常使用的包名,例如:org.hhh,最好是填寫公司或者組織名稱。
Artifact Id:要新建的項目的名字,就是項目的唯一的標識符,實際對應項目的名稱,就是項目根目錄的名稱。一般GroupID就是填com.leafive.test這樣子。
Version:版本號,默認0.0.1-SNAPSHOT
Packing:要將該項目生成什么類型,有jar,war,ejb,ear,rar,pom,maven-plugin,maven-archetype,osgi-bundle,eclipse-plugin
Name:名字(估計是模板的名字)
Description:說明
下圖僅供參考:
點擊finish后如圖所示
會報錯,不要着急,可以解決。
選中剛才新建的項目,然后鼠標右鍵
按照箭頭指向的順序來操作即可,操作完之后,進行下面的操作。
Tomcat版本以及jdk版本自己決定。
選則剛才選擇的jdk版本,之后點擊Apply,點擊OK,項目不報錯了。
這一項無法在可視化界面中更改,需要手動更改配置文件,打開剛才新建項目的文件夾目錄,找到
改為2.5即可,保存,然后回到eclipse中刷新剛才的項目即可。
是不是改為了2.5了呢,對於這一項為什么要改,予目前為止不是很清楚,但是2.5用的比較多而已,懇請各位不吝賜教,我感激不盡。
項目清單如下圖所示,由於版本問題,可能會有些出入,不過無傷大雅:
src/main/java:主要編碼的目錄。
src/main/resource:資源目錄.如:spring的xml.Java配置properties。
src/test/java:測試的代碼。
src/test/resource:測試的資源.如:spring的xml.Java配置properties。
Libraries下的JRE System Library:Java運行環境,默認JavaSE1.5,根據要求,對其進行更改,上面有修改的方法,也可以固定版本。
如果不固定的話,每次如上圖所示升級maven項目的話,都需要手動更改,關於如何固定版本,后面會有提到,不要着急哦,當成網絡小說,繼續看。
Maven Dependencies:Maven的依賴項目,包括該項目下的依賴包。
Apache Tomcat包是因為這個項目是一個web項目,上面有提到,所以要用到Apache tomcat包。
JavaScript Resources同上。
src:對應src/main/java與src/test/java的class文件夾。
target:目標文件生成,例如要將項目生成jar就會生成到這個目錄下。
pom.xml:maven項目的配置文件,POM 即 Project Object Module,項目對象模型,在 pom.xml 文件中定義了項目的基本信息、源代碼、配置文件、開發者的信息和角色、問題追蹤系統、組織信息、項目授權、項目的 url、以及構建項目所用的插件,依賴繼承關系。開發人員需按照 maven 定義的規則進行 POM 文件的編寫。
提到配置文件或許會有很多朋友頭疼,但是我要告訴朋友,想不頭疼,別着急慢慢往下看。
雙擊pom.xml然后在右側編輯窗口下方選擇
竟然沒有看到一個中文,不要擔心,我帶你嗨翻pom.xml配置文件。
1. parent 給出父項目的位置,如果存在上一級父項目的話。如果沒有特別指出的話,值就是父項目對於當前項目而言。位置是一個 as a group ID, artifact ID 和version元素的組合。 |
下面的是標准的,可能看着有點密集,對了,附帶效果治療密集恐懼症,下面的文章內容引自http://www.ibm.com/developerworks/cn/java/j-lo-maven/index.html 予決定不錯,很值得學習,故而張貼出來,好文章當共享,感謝下面的文章原作者,予對你表示致敬。
引用開始:
項目對象模型 POM-Maven 的靈魂
POM 即 Project Object Module,項目對象模型,在 pom.xml 文件中定義了項目的基本信息、源代碼、配置文件、開發者的信息和角色、問題追蹤系統、組織信息、項目授權、項目的 url、以及構建項目所用的插件,依賴繼承關系。開發人員需按照 maven 定義的規則進行 POM 文件的編寫,清單 1 為一個 POM 文件示例。
清單 1. POM 文件示例
<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>
<! – The Basics – >
<groupId> … </groupId>
<artifactId> … </artifactId>
<version> … </version>
<packaging> … </packaging>
<dependencies> … </dependencies>
<parent> … </parent>
<dependencyManagement> … </dependencyManagement>
<modules> … </modules>
<properties> … </properties>
<! – Build Settings – >
<build> … </build>
<reporting> … </reporting>
<! – More Project Information – >
<name> … </name>
<description> … </description>
<url> … </url>
<inceptionYear> … </inceptionYear>
<licenses> … </licenses>
<organization> … </organization>
<developers> … </developers>
<contributors> … </contributors>
<! – Environment Settings – >
<issueManagement> … </issueManagement>
<ciManagement> … </ciManagement>
<mailingLists> … </mailingLists>
<scm> … </scm>
<prerequisites> … </prerequisites>
<repositories> … </repositories>
<pluginRepositories> … </pluginRepositories>
<distributionManagement> … </distributionManagement>
<profiles> … </profiles>
</project>
在每個 POM 文件中都含有的元素是該 project 的坐標,它包含三個基本元素。
groupId 定義了項目屬於哪個組,這有助於在大的范圍上區別項目。artifactId 定義了這個項目在組中唯一的 ID。name 是一個用戶友好的項目名稱。
除了項目坐標外,modelVersion 指定 POM 模型的版本,version 指明當前項目的版本,packaging 指定了項目發布時的打包類型。
在下文中提及的插件,依賴,生命周期等也都有相應的 POM 元素在文件中有所體現。
Maven 插件和倉庫
Maven 本質上是一個插件框架,它的核心並不執行任何具體的構建任務,僅僅定義了抽象的生命周期,所有這些任務都交給插件來完成的。每個插件都能完成至少一個任務,每個任務即是一個功能,將這些功能應用在構建過程的不同生命周期中。這樣既能保證拿來即用,又能保證 maven 本身的繁雜和冗余。
將生命周期的階段與插件目標相互綁定,就可以在特定的階段完成具體的構建任務。例如清單 2 中的代碼就是要在 validate 這個階段執行 maven-antrun-plugin 的 run 目標,具體的任務在 <target></target> 元素中定義。
清單 2. 插件
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>version</id>
<phase>validate</phase>
<configuration>
<target>
具體任務
</target>
</configuration>
<goals>
<goal> run </goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
Maven 項目中的插件,依賴和項目構建的輸出都可以由 Maven 的坐標進行唯一的區分,基於這種機制,Maven 將所有項目的構件文件放置在一個統一的位置,也就是 Maven 倉庫。所有 Maven 項目可以從同一個 Maven 倉庫中獲取自己所需要的依賴 JAR,這節省了磁盤資源。實際的 Maven 項目中不需要存儲依賴的文件,只需要在 POM 文件中生成依賴關系,在構建的時候 Maven 就會自動去倉庫中下載。
在安裝了 Maven 的機器上,會生成一個 ~\.m2\repository 目錄,這個目錄被稱為本地倉庫,當 Maven 查找需要的依賴時,首先會在本地查找,如果本地倉庫中存在,則直接使用,否則 Maven 回去遠程倉庫查找,查找到后下載到本地進行使用。遠程中央倉庫的地址為 http://repo1.maven.org/。當然還有一些鏡像倉庫可供使用,有興趣的讀者可以參考 Maven 官方網站的相關介紹。
當個人所在的網絡無法訪問公共的 Maven 倉庫時,可以在 settings.xml 中設置代理服務器。打開 ~\.m2\settings.xml,如果沒有則復制 $Maven_HOME/conf/settings.xml 到此路徑下,加入清單 3 中的代碼:
清單 3. 代理
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host> 代理地址 </host>
<port>8080</port>
<username> 用戶名 </username>
<password> 密碼 </password>
</proxy>
</proxies>
依賴、聚合和繼承
- 依賴
我們項目中依賴的 Jar 包可以通過依賴的方式引入,通過在 dependencies 元素下添加 dependency 子元素,可以聲明一個或多個依賴。通過控制依賴的范圍,可以指定該依賴在什么階段有效。Maven 的幾種依賴范圍:
表 2. 依賴范圍
名稱 |
有效范圍 |
compile |
編譯,測試,運行。默認的依賴范圍。 |
test |
測試,如 Junit。 |
runtime |
運行,如 JDBC。 |
provided |
編譯,測試,如 ServletAPI。 |
system |
編譯,測試,依賴於系統變量。 |
清單 4 中表示引入對 Junit 的依賴 , 這個依賴關系產生作用的階段是 <scope>test</scope>。
清單 4. 依賴
<dependency>
<groupId> </groupId>
<artifactId> </artifactId>
<version> </version>
<optional>true<optional>
</dependency>
依賴是具有傳遞性的,例如 Project A 依賴於 Project B,B 依賴於 C,那么 B 對 C 的依賴關系也會傳遞給 A,如果我們不需要這種傳遞性依賴,也可以用 <optional> 去除這種依賴的傳遞,如清單 5。
清單 5. 選擇性依賴
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<optional>true<optional>
</dependency>
假設第三方的 jar 包中沒有使用 <optional> 來去除某些依賴的傳遞性,那么可以在當前的 POM 文件中使用 <exclusions> 元素聲明排除依賴,exclusions 可以包含一個或者多個 exclusion 子元素,因此可以排除一個或者多個傳遞性依賴。如清單 6。
清單 6. 排除依賴
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
- 聚合
現實中一個項目往往是由多個 project 構成的,在進行構建時,我們當然不想針對多個 project 分別執行多次構建命令,這樣極容易產生遺漏也會大大降低效率。Maven 的聚合功能可以通過一個父模塊將所有的要構建模塊整合起來,將父模塊的打包類型聲明為 POM,通過 <modules> 將各模塊集中到父 POM 中。如清單 7,其中 <module></module> 中間的內容為子模塊工程名的相對路徑。
清單 7. 聚合
<modules>
<module>../com.dugeng.project1</module>
<module>../com.dugeng.project2</module>
</modules>
父類型的模塊,不需要有源代碼和資源文件,也就是說,沒有 src/main/java 和 src/test/java 目錄。Maven 會首先解析聚合模塊的 POM 文件,分析要構建的模塊,並通過各模塊的依賴關系計算出模塊的執行順序,根據這個潛在的關系依次構建模塊。將各子模塊聚合到父模塊中后,我們就可以對父模塊進行一次構建命令來完成全部模塊的構建。
- 繼承
在面向對象的編程中我們學會了繼承的概念,繼承是可重用行即消除重復編碼的行為。Maven 中繼承的用意和面向對象編程中是一致的。與聚合的實現類似,我們通過構建父模塊將子模塊共用的依賴,插件等進行統一聲明,在聚合和繼承同時使用時,我們可以用同一個父模塊來完成這兩個功能。
例如將 com.dugeng.parent 這個模塊聲明為 project1 和 project2 的父模塊,那么我們在 project1 和 2 中用如下代碼聲明父子關系,如清單 8:
清單 8. 繼承
<parent>
<groupId>com.dugeng.mavenproject</groupId>
<artifactId>com.dugeng.parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../com.dugeng.parent/pom.xml</relativePath>
</parent>
由於父模塊只是用來聲明一些可共用的配置和插件信息,所以它也像聚合模塊一樣只需要包括一個 POM 文件,其它的項目文件如 src/main/java 是不需要的。
聚合和繼承存在一些共性和潛在的聯系,在實際的應用中,經常將聚合模塊的父模塊和繼承的父模塊定義為同一個。
並不是所有的 POM 元素都可以被繼承,表 3 是一個可繼承的元素列表。
表 3. 可繼承元素列表
名稱 |
描述 |
groupId |
項目組 ID |
version |
項目版本 |
description |
描述信息 |
organization |
組織信息 |
inceptionYear |
創始年份 |
url |
項目的 url 地址 |
developers |
開發者 |
contributors |
貢獻者信息 |
distributionManagerment |
部署信息 |
issueManagement |
缺陷跟蹤系統 |
ciManagement |
持續繼承信息 |
scm |
版本控制信息 |
mailingList |
郵件列表信息 |
properties |
自定義的屬性 |
dependencies |
依賴配置 |
dependencyManagement |
依賴管理配置 |
repositories |
倉庫配置 |
build |
源碼目錄,插件管理等配置 |
reporting |
報告配置 |
Maven 屬性
在 POM 文件中常常需要引用已定義的屬性以降低代碼的冗余,提高代碼的可重用性,這樣不僅能降低代碼升級的工作量也能提高代碼的正確率。有些屬性是用戶自定義的,有些屬性是可以直接引用的已定義變量。
Maven 的可用屬性類型可分為 5 種,它們分別是:
- 內置屬性。這種屬性跟 Maven Project 自身有關,比如要引入當前 Project 的版本信 息,那么只需要在使用的位置引用 ${version} 就行了。
- Setting 屬性。上文中已經提到 Maven 自身有一個 settings.xml 配置文件,它里面含有包括倉庫,代理服務器等一些配置信息,利用 ${settings.somename} 就可以得到文件里相應元素的值。
- POM 屬性。這種屬性對應 POM 文件中對應元素的值,例如 ${project.groupId} 對應了 <groupId></groupId> 中的值,${project.artifactId} 對應了 <artifactId> </ artifactId > 中的值。
- 系統環境變量。可以使用 env.${name} 來獲得相應 name 對應的環境變量的值,例如 ${env.JAVA_HOME} 得到的就是 JAVA_HOME 的環境變量值。
- 用戶自定義變量。這種類型的變量是使用最頻繁和廣泛的變量,完全由用戶自己定義。在 POM 文件中加入 <properties> 元素並將自定義屬性作為其子元素。格式如清單 9。
清單 9. 自定義屬性
<properties>
<path>../../sourcecode</path>
</properties>
Maven 3 的新特性
Maven 3 在性能和靈活性方面都比 Maven2 有了很大提升,它的新特性總結起來有以下幾點:
1. 兼容低版本 Maven,也就是向后兼容,因此用戶可以將 Maven2 的項目移植到 Maven3 上來。
2. 性能優化。CPU 利用率更高,內存消耗更小,經過優化的 Maven3 比 Maven2 構建速度快出 50% 以上,這對於構建大型項目的開發者來說無疑會節省大量的時間。
3. 在早先的版本中,開發者必須在子模塊中指定父版本,當進行代碼的遷移或升級時,這會帶來額外的維護工作,Maven3.1 將會消除在子模塊上指定父版本的需要。
4.Maven3 改善了錯誤報告,它會在錯誤報告中提供指向 Maven Wiki 頁面的鏈接,這樣開發者可以方便的查看更全面的錯誤描述和可能的原因。
5. 增加了 Maven Shell,通常我們可以在系統自帶的 console 里執行 Maven 命令,但是通過自安裝的 Maven Shell 可以提高生成速度,它是一個是 Maven 的命令行接口工具,可以緩存解析過的 POM,避免了重復調用 Maven 的啟動成本。Maven Shell 不屬於 Maven 發行包的一部分,需要單獨下載。
6. M2Eclipse 實現了 Maven 和 Eclipse 的集成,與一個使用更廣泛的 IDE 進行集成從而為開發者帶來的便利是不言而喻的。
結束語
Maven 有着許多實用的特點,它使用了標准的目錄結構和部署。這就使得開發人員能夠適應不同的項目,並且不用學習任何結構方面新的東西,也不用掌握特殊的指令來構建結構。當然,Maven 的使用還不夠普及,相信隨着時間的推移,它的功能會更完善,使用的人群也會越來越廣泛。
引用結束。
轉載請注明出處,謝謝。