eclipse新建maven項目(1)


首先看一下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元素的組合。
2.modelVersion 描述這個POM文件遵從哪個版本的項目描述符.
3.groupId 針對一個項目的普遍唯一識別符。通常用一個完全正確的包的名字來與其他項目的類似名字來進行區分(比如:org.apache.maven)
4.artifactId 在給定groupID 的group里面為artifact 指定的標識符是唯一的 artifact 代表的是被制作或者被一個project應用的組件。對於Maven項目的artifact 的例子包括:一些JARs, 原代碼以及二進制的發布以及WARs.
5.packaging 這個項目生產出來的artifact 類型,舉個例子 jar war pom Plugins 能夠創建他們自己的包,包括包的類型,所以這個列表不可能包含所有可能的類型
6.name 當前項目的全稱
7.version 當前項目產生的artifact的當前版本
8.description 當前項目的一個細節描述,當需要描述這個項目的時候被Maven所用,比如在web 站點中。 這個元素能夠被指定為CDATA 類型,允許在描述器中HTML的tags, 並不鼓勵用空白文本來表示。 如果你需要去修改生成的web 站點的索引頁,你能夠用你自己的索引來代替自動生成的文本。
9.url 當前項目的主頁的URL
10.prerequisites 描述當前項目的編譯環境的先決條件
11.issueManagement 當前項目的發布管理信息。
12.ciManagement 當前項目的連續集成信息。
13.inceptionYear 當前項目開始的年份, 用4位數字描述. 涉及到介紹情況時用作提供版權信息
14.mailingLists 包含的信息包括郵件列表
15.developers 描述當前的項目的開發人員的信息
16.contributors 描述對當前項目有貢獻的人員的信息,不特指開發人員
17.licenses 這個元素描述了當前項目的所有的許可文件。每一個許可文件用一個許可元素來描述,然后描述額外的元素. 通常只列出適用於這個項目的許可文件以及適用於 依賴的非licenses。如果多個licenses都列出來了,那么假設這個用戶選擇其中的所需的,而不是接受所有的許可文件。
18.scm 指定當前項目中的版本控制工具,比如CVS, Subversion, 等等。
19.organization 這個元素描述這個項目所屬組織的各種屬性的描述。這些屬性應用於文檔創建的時候 (版權通知和鏈接).
20.build 創建項目時必須的信息。
21.profiles 本地項目編譯檔案文件時的列表,被激活時會修改build的過程
22.modules 模塊 (有時被叫做子項目)作為當前項目的一部分.每一個被列出來的子模塊都指向包含這個模塊的目錄文件的相對路徑
23.repositories 發現依賴和擴展的遠程資源庫
24.pluginRepositories 發現plugins 的遠程資源庫的列表,主要是為了編譯和報告
25.dependencies 這個元素描述了所有與當前項目相關的依賴.這些依賴被用作創建一個編譯時的路徑. 他們被自動的從資源庫中下在下來依據當前項目的定義。如需更多信息,參看 the dependency mechanism
26.reports Deprecated.禁止適用。現在的版本中被 Maven所忽略掉。
27.reporting 這個元素包括報告的plugins 的指定,用作Maven生成站點的自動生成報告.這些報告將會運行當用戶執行mvn site. 所有的報告將會包括在瀏覽器的導航欄中。
28.dependencyManagement 缺省的依賴信息將會從這個元素中繼承。這些依賴在這一部分中被不立刻被解決的。當一個源於這個POM的元素描述了一個依賴根據匹配的 groupId 和artifactId,這個部分的版本和其他值用作那些還沒有指定的依賴。
29.distributionManagement 對於一個項目分配的信息允許對於遠程web服務器和資源庫的site和artifacts配置。
30.properties 屬性可以作為POM的自始自終的替換物,如果可行的話可以用作resources 的過濾器,格式是<name>value</name>

下面的是標准的,可能看着有點密集,對了,附帶效果治療密集恐懼症,下面的文章內容引自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 種,它們分別是:

  1. 內置屬性。這種屬性跟 Maven Project 自身有關,比如要引入當前 Project 的版本信 息,那么只需要在使用的位置引用 ${version} 就行了。
  2. Setting 屬性。上文中已經提到 Maven 自身有一個 settings.xml 配置文件,它里面含有包括倉庫,代理服務器等一些配置信息,利用 ${settings.somename} 就可以得到文件里相應元素的值。
  3. POM 屬性。這種屬性對應 POM 文件中對應元素的值,例如 ${project.groupId} 對應了 <groupId></groupId> 中的值,${project.artifactId} 對應了 <artifactId> </ artifactId > 中的值。
  4. 系統環境變量。可以使用 env.${name} 來獲得相應 name 對應的環境變量的值,例如 ${env.JAVA_HOME} 得到的就是 JAVA_HOME 的環境變量值。
  5. 用戶自定義變量。這種類型的變量是使用最頻繁和廣泛的變量,完全由用戶自己定義。在 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 的使用還不夠普及,相信隨着時間的推移,它的功能會更完善,使用的人群也會越來越廣泛。

 引用結束。

轉載請注明出處,謝謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM