maven 初體驗

Maven 是一個項目管理和構建工具

Maven是基於項目對象模型(pom),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。

---------------------------------------------------------------------------


Maven :

Bin目錄:包含mvn命令運行的腳本

Boot :包含一個類加載器的框架,maven用它來加載自己的類庫

Conf :配置文件

Libmaven運行依賴的類庫

----------------------------------------------------------------------------

maven的目錄結構:

Maven的目錄結構

Src(源代碼目錄)

   -main

         -java

                -package

   -test

         -java

                -package

   -resource(存放資源文件)

------------------------------------------------------------------------------------------

Maven中的基礎知識

Mvn –v 查看maven版本

 mvn   -compile 編譯

 mvn    -test測試

mvn      -package 打包

 Mvn –cleany用來刪除target(項目經過編譯的字節碼文件和測試報告)文件

  mvn           -install安裝jar到本地倉庫中可以將jar包發佈到本地倉庫中

我們通過mvn  –compile這個命令來編譯源代碼,如果在編譯的過程中程序用到了其他的支持包,他會去pom.xml查找是否引入該依賴包的座標,如果引入了,那麼maven會先按照在dependency的座標到本地倉庫中去找,如果有,maven將會把該jar加載到該項目classpath中,如果沒有找到該jar包,會按照網上的地址到maven的中央倉庫去找並且下載,下載到本地倉庫,供我們的項目進行使用,如果中央倉庫也找不到就會報錯

----------------------------------------------------------------------------------------------

常用的構建命令的框架

自動創建目錄骨架(maven提供了archetype插件,用於創建符合maven規定的目錄骨架)

創建目錄的兩種方式:

1.      archetypegenerate 按照提示進行選擇

2.      archetypegenerate –DgroupId=組織名

-DartifactId=

-Dversion=版本號

-Dpackage=代碼所存在的包

 

Maven中賦座標和倉庫:(所有構建通過座標做爲其唯一標識)

座標:groupId,artifactId(項目名和模塊名),version

倉庫:用來管理項目的依賴,倉庫分爲本地倉庫,遠程倉庫,maven所有的pom.xml都會繼承一個超級的pom.xmllib下的maven-model-builder.3.3.3.jar裏面的pom.xml,url標籤裏的地址就是中央倉庫的地址(包含了絕大多數的開源jar

 

鏡像倉庫:(鏡像就是a提供和b一樣的功能)maven的中央倉庫的服務器在國外,有時可能無法訪問外網,但是國內有它的鏡像倉庫。

如何修改鏡像倉庫位置,

Maven Conf下的settings文件修改mirror

如何更改本地倉庫的位置:修改settings,找到localRepository,把路徑放進去即可

-------------------------------------------------------------------------------------------------

 

eclispse中裝maven插件,加載好插件後,建立一個maven項目,

步奏爲new-maven project-next-選擇。。。quickstart,next填寫groupId,artifactId,version,

運行項目:選中Pom.xml右鍵run as      maven build,goals裏面輸入maven命令:如compile編譯項目,package,打包項目(在項目的target目錄下:class文件,測試報告,jar文件)

--------------------------------------------------------------------------------------------------


maven的生命週期

Maven的生命週期

完整的項目構建過程:清理,編譯,測試,打包,集成測試,驗證,部署

Maven生命週期:(定義了三套相互獨立的生命週期,每個生命週期中又包括一些階段,其階段是有順序的,且後面的階段依賴前面的階段,執行某個階段時,其前面的階段會順序執行,但不會觸發另外兩套生命週期的任何階段,例如運行compile這個階段時,packagetest會自動的執行)

Clean:清理項目

Default:構建項目

Site:生成項目站點

 

(1)      clean清理項目

階段:pre-clean  執行清理前的工作,

             Clean  清理上一次構建生成的所有文件,

             Post-clean執行清理後的工作,

        2Default:構建項目

               常用的階段:compile,test,package,install(在運行package這個階段時,是先運行compiletest階段的)

          (3) Site:生成項目站點

               Pre-site:生成項目站點前要完成的工作

Site:生成項目站點文檔

Post-site:生成項目站點後要完成的工作

Site-deploy:發佈生成站點到服務----------------------------------------------------------------------------------

Pom.xml常用元素

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion><!-- 指定了當前pom的版本 -->

  <!-- 座標元素 -->
  <groupId>com.imooc.hi</groupId><!-- 反寫的公司網址+項目名 -->
  <artifactId>hi</artifactId><!-- 項目名+模塊名  例如 struts2_01 -->
  <version>0.0.1-SNAPSHOT</version><!-- 版本號:一般由三個數字組成,第一個表示大版本號,第二個表示分支版本號,第三個表示小版本號 -->
  <packaging>jar</packaging><!-- maven項目的打包方式,默認是jar -->

  <name>hi</name><!-- 項目的描述名,產生項目文檔時會使用 -->
  <url>http://maven.apache.org</url><!-- 項目的地址 -->
  <description></description><!-- 項目的描述 -->
  <developers></developers><!-- 開發人員 -->
  <licenses></licenses>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

 <!-- 依賴列表 -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope><!-- 依賴的範圍,junit的jar只在我們的測試的依賴範圍內有用 -->
      <!--maven提供的三種classpath值:編譯,測試,運行,
        依賴的範圍就是用來控制依賴與三種classpath的關係的,scope的屬性compile(默認的,對於三種classpath都有效),test(測試範圍有效,如junit),
        runtime(測試和運行有效,如jdbc的驅動實現)
        ,system(編譯和測試有效,與本地系統相關聯),import(只用於dependencyManagement,表示從其他pom繼承過來的依賴),
        provided(編譯和測試有效,如當我們構建一個web項目時,
        編譯和測試時可以依賴 servlet API,運行時並不會被加入,因爲web容器已經包含servlet API),具體查看maven官網文檔
     -->
       
      <optional></optional><!-- true 和false用來設置依賴是否可選,默認是false,如果是false,子項目默認是繼承的 -->
      <exclusions><!-- 排除依賴傳遞的列表 -->
        <exclusion></exclusion><!-- 比如a依賴b,b依賴c,那麼c對於a來說就是傳遞依賴,如果a不想依賴c,就可以使用這個標籤 -->
        <!--  -->
        
      </exclusions>
    </dependency>
  </dependencies>
  <!-- 依賴的管理,它不會被運行 ,不會被引入到實際的依賴中,主要是定義在父模塊中,供子模塊所繼承用的,即公共的 -->
  <dependencyManagement>
     <dependencies></dependencies>
  </dependencyManagement>
  <!--  ,對構建的行爲提供相應的支持-->
  <build>
    <!--  插件  -->
    <plugins>
        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                  <!--  運行package命令時就能將source的源碼打包,綁定source到default生命週期的package階段 -->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
        </plugin>
    </plugins>
  </build>
  <!-- 通常用於子模塊中對父模塊的pom的繼承 -->
<!--   <parent></parent> -->
  <!-- 是用來聚合運行多個的maven項,如果有很多的maven模塊需要編譯,就不需要一個個編譯 -->
  <modules></modules>
</project>


------------------------------------------------------------------------------------------------

依賴的範圍scope

maven提供的三種classpath值:編譯,測試,運行,
        依賴的範圍就是用來控制依賴與三種classpath的關係的,scope的屬性compile(默認的,對於三種classpath都有效),test(測試範圍有效,如junit),
        runtime(測試和運行有效,如jdbc的驅動實現)
        ,system(編譯和測試有效,與本地系統相關聯),import(只用於dependencyManagement,表示從其他pom繼承過來的依賴),
        provided(編譯和測試有效,如當我們構建一個web項目時,
        編譯和測試時可以依賴 servlet API,運行時並不會被加入,因爲web容器已經包含servlet API),具體查看maven官網文檔


------------------------------------------------------------------------------------------------------

依賴衝突:短路優先,例如:

A->B->C->X(jar)

A->D->X(jar)這個會優先解析

 

在依賴路徑長度相同的情況下,先聲明dependency先優先

------------------------------------------------------------------------------------------------------

聚合與繼承

聚合:是用來聚合運行多個的maven項,如果有很多的maven模塊需要編譯,就不需要一個個編譯

      <modules>
     <module>../hongxing-nage</module>
      <module>../hongxing-bge</module>
      <module>../hongxing-shanji</module>
  </modules>

繼承:

 <parent>
        <groupId>com.hongxing</groupId>
        <artifactId>hongxing-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

----------------------------------------------------------------------------------------------------

使用maven構建web項目:

使用maven新建maven項目,發佈到tomcat

  1.       首先在建立時選擇maven-archetype-webapp



2.      導入servlet依賴

3.      檢查classes文件的輸出路徑,項目輸出路徑在項目的target目錄的classes(項目右鍵->bulidpath->config build path->source)


4.      將項目轉換爲web項目並添加文件夾構建maven目錄結構:

項目右鍵->properties-project facets->dynamic web module(勾選)


5.      更改項目部署時的默認配置:

項目右鍵->properties->deployment Assemby-> (部署時不需要發佈test文件,如果有,則移除)


6.添加tomcat


可以使用項目右鍵-run as –maven build..-tomcat:run( clean package)啓動tomcat服務

<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.sj.webapp</groupId>
  <artifactId>webDemo2</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>webDemo2 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
   
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>webDemo2</finalName>
    <plugins>
        <plugin>
             <groupId>org.apache.tomcat.maven</groupId>
             <artifactId>tomcat7-maven-plugin</artifactId>
             <version>2.2</version>
            <executions>
                <!-- 在打包成功後使用tomcat:run來運行tomcat服務 -->
                <execution>
                  <phase>package</phase>
                  <goals>
                    <goal>run</goal>
                  </goals>
                 </execution>
                
            </executions>
        </plugin>
    </plugins>
  </build>
</project>


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