1. 程式人生 > 實用技巧 >【Maven】Maven 高階應用

【Maven】Maven 高階應用

Maven 高階應用

Maven 基礎

Maven 是一個專案管理工具,它有如下好處

  • 節省磁碟空間
  • 可以一鍵構建
  • 可以跨平臺使用
  • 依賴傳遞和管理,提高開發效率

一鍵構建:Maven 自身集成了 Tomcat 外掛,可以對專案進行編譯、測試、打包、安裝、釋出等操作。

依賴傳遞和管理:Maven工程真正的 jar 包放置在倉庫中,專案中只需要配置上 jar 包的座標即可。座標的書寫規範,groupId 公司或組織域名的倒序,artifactId 專案名或模組名,version 版本號

座標示例

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.4</version>
</dependency>

倉庫的種類和關係

  • 分為本地倉庫,遠端倉庫(私服),中央倉庫
  • 啟動一個 Maven 工程的時候,pom.xml 會去本地倉庫尋找對應的 jar 包,預設情況下,如果本地倉庫沒有對應的 jar 包,Maven 工程會先私服(如果有)下載 jar 包到本地,如果沒有私服,則會從 中央倉庫 下載 jar 包到本地

Maven 依賴的作用域

  • compile 預設值,參與當前專案的編譯、測試、執行等週期,是一個比較強的依賴,會被打包到最終的 artifact 中。
  • provided 假定對應的依賴會由執行這個應用的 JDK 或者容器來提供,例如 ServletAPI 和 資料庫連線。理論上參與編譯、測試、執行等週期,不會被打包到最終的 artifact 中。
  • runtime 參與測試、執行期等週期,不參與專案的編譯,會被打包到最終的 artifact 中。
  • test 參與測試工作過程中的測試和執行,不會被打包到最終的 artifact 中。
  • system 和 provide 類似,唯一的區別在於它需要使用者告訴 Maven 如何去找到這個依賴。
  • import 從其它的 pom 檔案中匯入依賴設定,它只在 dependencyManagement 元素下使用,表示從其他 pom 中匯入 dependency 的配置。

Maven 常用命令

  • compile 編譯原始碼
  • test 執行應用程式中的單元測試
  • package 依據專案生成 jar 包
  • install 在本地 Repository 中安裝 jar 包
  • deploy 將 jar 包 上傳到私服
  • clean 清除目標目錄中的生成結果

Maven 生命週期

  • 清理生命週期 在開始真正的專案構建之前進行一些清理工作。
  • 預設生命週期 構建專案的核心部分,包括編譯、測試、打包、部署等。
  • 站點生命週期 生成專案報告、站點,釋出站點。

傳統構建工程

本節原始碼

定義專案 pom.xml

DAO 層

DAO 層 大致步驟為:

  • 實體類:
  • 持久層介面:
  • DAO 層 Spring 配置檔案:
  • 單元測試:

Service 層

Service 層 大致步驟為:

  • 業務層介面:
  • 業務層介面實現類:
  • Service 層 Spring 配置檔案:
  • 單元測試:

Web 層

Web 層 大致步驟為:

  • 控制器類:
  • SpringMVC 配置檔案:
  • web.xml 配置檔案:

JSP 頁面

執行和除錯

新增 tomcat7 外掛,直接點選 run 即可

  <build>
    <plugins>
      <!-- 新增 tomcat7 外掛 -->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <path>/</path>
          <port>8080</port>
        </configuration>
      </plugin>
    </plugins>

  </build>

分模組構建工程

本節原始碼

使用 IDEA 新建一個 Maven 工程,選擇 maven-archetype-webapp

  • 建立 ssm_parent 父工程(打包方式選擇 pom,必須的)
  • 建立 ssm_web 子模組(打包方式是 war 包)
  • 建立 ssm_service 子模組(打包方式是 jar 包)
  • 建立 ssm_dao 子模組(打包方式是 jar 包)
  • 建立 ssm_domain 子模組(打包方式是 jar 包)
  • web 依賴於 service,service 依賴於 dao,dao 依賴於 domain
  • 在 ssm_parent 的 pom.xml 檔案中引入座標依賴

這就是繼承和聚合,通常繼承和聚合同時使用。繼承,建立一個 parent 工程將所需的依賴都配置在 pom 中。聚合,聚合多個模組執行。

繼承是為了消除重複,如果將 dao、service、web 分開建立獨立的工程則每個工程的 pom.xml 檔案中的內容存在重複,比如:設定編譯版本、鎖定 spring 的版本等,可以將這些重複的配置提取出來在父工程的 pom.xml 中定義。

專案開發通常是分組分模組開發,每個模組開發完成要執行整個工程需要將每個模組聚合在一起執行,比如:dao、service、web 三個工程最終會打一個獨立的 war 執行。

執行和除錯

啟動方式一:本地 Tomcat 啟動

這種方式需要注意選擇正確的 Artifacts,比如該專案就應該選擇 web 模組。


啟動方式二:Tomcat 外掛 啟動 root,直接點選 run 即可


啟動方式三:Tomcat 外掛 啟動 web 模組,需要先 root install

總結和練習