在MAC下的Maven2安裝使用教程

       HELLO!大家好!這是咕嚕的第一篇博客,還請前輩們多包涵!!咕嚕大大,專注編程和單身30年!

       尊重原創,請大家轉載時註明該文章來自:http://blog.csdn.net/ymh198816/article/details/42528197

       正如大家所知的,maven是Apache底下的一個項目構建和管理工具,主要的功能有項目中依賴的jar包管理,項目的構建(build),清理,編譯,打包部署,運行測試用例,生成報告和文檔,軟件配置管理,發佈管理等等(要活用“等等”這個詞,當你不知道這玩意還有什麼功能時,寫上“等等”,就會顯得很專業的趕腳大笑)。在構建JavaEE項目時,很多人的第一反應就是要上SSH框架,因爲上框架能實現項目的工業化開發,提高代碼的複用性和可維護性,解耦合,方便模塊化層次化開發,好處自然不言而喻。但問題就在於要使用這些框架,就得往項目中下載不同的依賴包,哪怕是隻使用最基本的3個框架功能:數據庫持久化+依賴注入+前端控制,也需要下載20多個jar包,不光名字難以記全,還可能因爲版本不一致的問題導致jar衝突,這對開發人員來說簡直是一個噩夢!所以,這時候就要請ApacheMaven出馬了,maven提倡一個理念:約定大於配置(Convention Over Configuration),只要你遵守maven的項目配置約定(比如說:創建的項目目錄結構得是:/src/main/java),就只用在pom.xml中填寫少量的配置,maven便能幫你把項目自動管理起來,下載依賴包,清理構建部署等等,十分方便!

        下載安裝maven

         maven是一個Java工具,所以使用maven之前必須要在系統中安裝JDK。

         maven的官方下載傳送門:http://maven.apache.org/download.cgi

         將下載下來的bin tar.gz文件解壓縮並放在你想要的目錄下,目前最新的maven版本是3.2.5.

         接下來在你的mac操作系統中打開命令行終端,並在裏面添加一個maven2文件bin目錄地址的變量:

         >>export M2=/your/path/apache-maven-3.2.5/bin

         然後將剛剛的地址變量加入到系統中的path環境變量裏, 並輸出在bash_profile文件裏

         >>echo "export PATH=$M2:$PATH" >> ~/.bash_profile

    >>source ~/.bash_profile

    沒報錯的話,最後運行

    >>mvn --version

    如果出現下面的內容,恭喜你已經成功安裝maven2在你的mac系統上了。

   

Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: /Users/apple/Documents/apache-maven-3.2.5
Java version: 1.6.0_65, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: zh_CN, platform encoding: EUC_CN
OS name: "mac os x", version: "10.9.5", arch: "x86_64", family: "mac"

       創建maven項目

      在maven中使用archetype機制去構建一個項目,archetype是一個通用的maven項目的模板管理工具,用戶也可以通過archetype爲自己的EJB,SPRING項目建立模板。

        打開你的命令行並使用archetype命令去創建一個符合maven約定的項目。

        >>mvn -B archetype:generate  -DarchetypeGroupId=org.apache.maven.archetypes  -DgroupId=com.guludada.maven -DartifactId=my-maven

        第一次創建可能時間會比較久,因爲會下載許多依賴包。 DarchetypeGroupId是該模板所屬的機構(group);DgroupId是你自己的項目所屬的機構,使用倒敘域名的寫法;DartifactId是你項目的名稱; (其中“archetype:create”已不推薦使用)

        在當前目錄下,archetype就會創建如下目錄結構的maven項目:

        --my-maven

           --pom.xml

           --src

              |--main

                  --jave

                     --com

                        --guludada

                           --maven

                              --App.java

               |--test

                   --java

                     --com

                        --guludada

                           --maven

                              --AppTest.java


      一個標準的maven項目目錄結構中,包含一個pom.xml文件,以及項目業務源碼的存放目錄${DartifactId}/main/java和測試源碼的存放目錄${DartifactId}/test/java

      同時,你還可以使用 “-DarchetypeArtifactId=${template_name}”指定模板去創建maven項目,默認情況下,如果不明確指明用哪個模板去創建項目,系統會使用“-DarchetypeArtifactId=maven-archetype-quickstart”模板去創建項目,如上所示;如果你想創建一個webapp項目,你可以在使用archetype命令時明確指出:“-DarchetypeArtifactId=maven-archetype-webapp”,或者你也可以自定義自己的archetype模板。

       maven的核心:pom.xml

       在maven工程下,你會看見pom(Project Object Model)文件,它是maven項目的核心也是最本的maven元素。pom文件記錄着關於項目的信息以及被maven用來構建項目的配置。一個基本的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>
  <groupId>com.guludada.maven</groupId>
  <artifactId>my-maven</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-maven</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

“<project>”是pom.xml的頂級元素。

“<modelVersion>”是指當前pom的版本,一般就默認配置就好了

"<groupId>"是指這個項目創建者的ID,一般就是公司域名的倒敘,如:com.guludada

"<artifactId>"是指這個項目產生的可運行軟件的名稱,並遵循<artifactId>-<version>.<extension>的格式,如上maven產生的jar包名就是:my-maven-1.0.jar

"<packaging>"是指項目打包的格式,如:jar,war,ear等,默認情況下是jar

"<version>" 指的是該項目的版本,maven有自己的一套項目版本管理機制,如上所示-snapshot的指示符標明該項目處於開發階段

"<name>"指的是該項目的名稱,通常被用在maven生成的文檔中

"<url>"指的是該項目部署的域名,通常被用在maven生成的文檔中


一個最輕量最基本的pom文件必須包含:“<project>”,“<modelVersion>”,"<groupId>","<artifactId>","<version>"這5個元素。

同時,所有項目的pom文件都會繼承一個父類pom文件:super pom,如下所示:

<project>
  <modelVersion>4.0.0</modelVersion>
  <name>Maven Default Project</name>

  <repositories>
    <repository>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <layout>default</layout>
      <url>http://repo1.maven.org/maven2</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

  <build>
    <directory>target</directory>
    <outputDirectory>target/classes</outputDirectory>
    <finalName>${artifactId}-${version}</finalName>
    <testOutputDirectory>target/test-classes</testOutputDirectory>
    <sourceDirectory>src/main/java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
      </testResource>
    </testResources>
  </build>

  <reporting>
    <outputDirectory>target/site</outputDirectory>
  </reporting>

 ……………………………………

</project>
上面的super pom只列了一部分內容,主要是要讓大家看“<build>”元素中的內容
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
這裏就約定了maven的目錄結構是:src/main/java的結構,所以沒有什麼類似不改會死的需求的話,就不要去改這個maven約定的項目目錄結構了,畢竟是很多開發人員總結出來的項目目錄結構。大笑

  Maven2的包管理

  最爲大家熟悉的就是Maven的包管理機制了,只要配置好pom.xml文件,maven就會自動幫你下載管理項目所需要用的依賴包。構建項目時,maven會先去~/.m2/repository下尋 找項目中需要用到的依賴包,如果沒有的話,maven就會去遠程庫(http://repo.maven.apache.org/maven2/)中下載依賴包到本地中來。

  

<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>com.guludada.upload</groupId>
  <artifactId>my-UploadWeb</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-UploadWeb Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>my-UploadWeb</finalName>
  </build>
</project>

如上所示,只要在pom.xml根據項目需要,使用“<dependencies>”標籤添加要依賴的jar包庫信息,maven就會幫你自動將jar包管理起來。

“grouid”,“artifactid”和“version”和之前提到的含義是相同的,這裏多了一個“<scope>”標籤,這個scope標籤是指明項目在什麼時候使用這些依賴包,默認下是“compile”,這裏是指定爲“test”,意思就是隻有當項目的測試模塊編譯和運行時才使用這個junit依賴包。


   無圖無真相,無例無內涵

   這裏通過一個簡單的例子來演示如何用maven構建你的項目。

   首先打開命令行,用archetype來構建maven項目,並且指定“-DarchetypeArtifactId=maven-archetype-webapp”,這樣創建的maven項目目錄下面就會有一個webapp的目錄

   >>mvn -B archetype:generate  -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.guludada.upload   -DartifactId=my-UploadWeb

    然後使用Eclipse的"File"-->"Import"功能將剛剛創建好的maven項目導進來,選擇“Existing Maven Projects”



   可以看見導入剛剛創建好的maven項目後的目錄結構如下圖所示:



我們會發現剛創建的maven項目報錯了,沒關係,我們現在來解決。從項目錯誤來看,提示的是找不到“javax.servlet.http.HttpServlet”找不到。首先右鍵點擊項目,並選擇“Properties” --> "Project Facets", 你會看見Eclipse自動爲你勾選了 “Dynamic Web Module” 模板,所以項目中必須要有servlet-api的jar包,而servlet一般由容器生成,所以我們這時候要去檢查TOMCAT的jar包有沒有導入到項目中來。



接下來,選擇“Java Build Path”,我們會看見裏面的“Libraries”選項卡中只有“JRE System Libraries”和“maven dependencies”兩個jar包庫,這是遠遠不夠的;需要點擊右邊的“Add Library”按鈕,選擇添加“Server Runtime”(Tomcat的lib庫),“Web App Libraries”和“EAR Libraries”(企業級應用EJB的依賴庫)3個jar包庫;



   添加完依賴包後,你會發現Eclipse自動幫你構建了“src/main/java”文件目錄。右鍵點擊項目,選擇“Properties”-->"Deployment Assembly",如果裏面沒有“Maven Dependencies”,則需要點擊右邊的“add…”-->"Java Build Path Entries"-->"Maven Dependencies"添加進去。



這時候一個完整的maven web項目就構建完成了,之前的錯誤也消失了,可以開始實現上傳文件的程序了。(如果仍然報錯,可以右鍵點擊項目選擇“Validate”,就會好了)

最後一步就是要在pom文件中中配置該項目要使用到的依賴包(通過“<dependency>”標籤),並點擊保存(或打開命令行輸入mvn compile),那麼maven就會從遠程依賴庫中下載該項目要用到的依賴包到本地依賴庫中。


這樣一個完整的maven項目就算構建完成了。接下來開始寫業務代碼吧。

很多朋友會問到,這裏maven的目錄結構爲src/main/java/com/guludada/UploadWeb或"src/main/webapp",我們在配置web.xml文件或者在servlet中寫要調用的jsp或servlet的地址,是不是要寫全maven的目錄結構?答案是否定的!!右鍵點擊項目,選擇“Properties”-->"Deployment Assembly",你會發現“src/main/java”目錄下的文件都直接構建在WEB-INF/classes目錄下,所以在web.xml配置文件下,就像平常那樣在“<servlet-class>”標籤裏直接寫上“com.guludada.uploadApp.app”,而不用再寫上”src/main/java“目錄了。同理,“src/main/webapp”下的文件全部構建在“/”目錄下,所以在servlet中調用jsp時,直接寫上“request.getRequestDispatcher("index.jsp").forward(request, response)”就可以了,而不用再帶上“request.getRequestDispatcher("src/main/webapp/index.jsp").forward(request, response)”前綴地址。



         小技巧

          當在不同項目的pom文件中自定義不同的遠程倉庫,並且想要更換某一個項目的倉庫時,你可以在${user.home}/.m2/settings.xml中自定義你某個項目裏遠程倉庫的鏡像,而不用改變原有項目的pom文件。其中<mirrorOf>和pom文件中<repository>標籤下的<id>一致。這樣你就可以用下面配置的新倉庫地址去更換原有項目中pom文件裏配置的倉庫地址了。

        

<settings>
  ...
  <mirrors>
    <mirror>
      <id>CHN</id>
      <name>CHN Central</name>
      <url>http://your/repository/addr/maven2</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

目前maven2的遠程倉庫的官方地址是:位於米國的http: //repo.maven.apache.org/maven2, 和腐國的 http://uk.maven.org/maven2. 不過沒啥事就不要去改這個默認配置了,反正我用着挺溜的。


好了,最後希望這篇文章對大家能有幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章