1. 程式人生 > >Maven的介紹及使用

Maven的介紹及使用

maven:

是一個構建工具,基於java平臺的專案構建,依賴管理、專案資訊管理

構建:

構建是每一位程式設計師每天都在做的工作。早上來到公司,我們做的第一件事就是從原始碼庫簽出最新的程式碼,然後進行單元測試,如果發現失敗的測試,會找相關的同事一起除錯,修復程式碼錯誤。接著回到自己的工作上來,編寫自己的單元測試及產品程式碼。
構建就是除了編寫原始碼,還有編譯,執行單元測試,生成文件,打包和部署等繁瑣切不起眼的工作上。

優勢:

跨平臺、
服務於構建、
標準化、
封裝構建過程、
依賴管理工具、
專案規範化 —— 預定優於配置

倉庫:

中央倉庫:maven的倉庫在國外伺服器
本地倉庫:當依賴一個jar包時,首先查詢的是本地倉庫,如果本地倉庫沒有,那麼從中央倉庫下載,下載到本地倉庫。依賴時從本地倉庫直接依賴
本地倉庫預設在${user.home}/.m2/repository
通過maven的conf目錄下的settings可以設定本地倉庫的位置
<localRepository>D:\\maven_repo\\repository</localRepository>
私服
:私有伺服器
在企業中一般都是搭建一個私有伺服器nexus(nexus),搭建私服後,可以依賴私服。此外一些無法從外部倉庫下載的構件也能從本地上傳到私服提供區域網中其他人使用
國內私服:開源中國、阿里雲

依賴範圍:

Compile:編譯依賴範圍。預設使用該依賴範圍,編譯、測試、執行都有效。
Test:測試依賴範圍。只在測試的時候需要。比如:junit。
Provided:已提供依賴範圍。對編譯和測試有效,執行時無效。比如:servletAPI
Runtime:執行依賴範圍。對測試和執行有效,但在編譯時無效。比如:JDBC驅動
System:系統依賴範圍。一般不適用。

傳遞性依賴:

依賴有可能產生衝突:
衝突場景:
a依賴b,b依賴c,c的版本是1.0
a依賴e,e依賴c,c的版本是2.0
結果:按照第一個宣告的算,1.0版本

衝突場景:
a依賴b,b依賴c,c依賴d,d的版本1.0
a依賴e,e依賴d,d的版本2.0
結果:路徑最近的有限,2.0版本

排除依賴:

<dependency>
     <groupId>com.siggy.crm</groupId>
          <artifactId>crm-user</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <exclusions>
              <exclusion>               
                  <groupId>com.google.code.gson</groupId>
                  <artifactId>gson</artifactId>
              </exclusion>
          </exclusions>
</dependency>

Maven專案的聚合和繼承

聚合:
建立一個空的Maven專案作為管理者
<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.siggy.crm</groupId>
  <artifactId>crm-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <modules>
      <module>../crm-core</module>
      <module>../crm-user</module>
      <module>../crm-login</module>
  </modules>
</project>

繼承
 <parent>
      <artifactId>crm-parent</artifactId>
      <groupId>com.siggy.crm</groupId>
      <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>com.siggy.crm</groupId>
  <artifactId>crm-admin</artifactId>
  <version>0.0.1-SNAPSHOT</version>

使用Maven構建web專案

Tomcat7的使用者及許可權配置:在conf目錄下,找到tomcat-users.xml,新增manager許可權的使用者。這裡我把所用的許可權都新增給admin使用者了,具體程式碼如下:
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="1111" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>

Maven的Server的配置:在Maven的安裝路徑找到conf目錄下的setting.xml檔案,在<servers>節點中新增tomcat7下配置的使用者資訊(id可以任意填寫,但username和password和上面一致):
<server>
    <id>tomcat7</id>
    <username>admin</username>
    <password>1111</password>
</server>

在web專案的pom.xml檔案的<plugins>節點中,新增tomcat7的maven外掛
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <!-- 注意此處的url -->
        <url>http://localhost:8080/manager/text</url>
        <server>tomcat7</server> <!-- 此處的名字必須和setting.xml中配置的ID一致-->
        <path>/mavenProject</path> <!-- 此處的名字是專案釋出的工程名-->
    </configuration>
</plugin>

最後只需要 mvn tomcat7:deploy 即可(必須事先啟動tomcat伺服器)