1. 程式人生 > 程式設計 >Spring Cloud Alibaba-Maven(三)

Spring Cloud Alibaba-Maven(三)

簡介

Apache Maven是一個軟體專案管理和理解工具。基於專案物件模型(POM)的概念,Maven可以從中央資訊管理專案的構建,報告和檔案。官方網站

生命週期

在 Maven 中,有三套相互獨立的生命週期,分別是 clean、default 和 site。每個生命週期都包括多個階段,後一個階段依賴前一個階段,執行一個階段會執行它之前的所有階段。

  • clean:清理專案
  • default:構建專案
  • site:建立專案站點

clean

更詳細的可以參見官網對生命週期的描述。官網生命週期描述

階段 描述
pre-clean 在實際專案清理之前執行所需的過程
clean 刪除上一版本生成的所有檔案
post-clean 執行完成專案清理所需的過程

default

階段 描述
validate 驗證專案正確無誤,並提供所有必要的資訊
initialize 初始化構建狀態,例如設定屬性或建立目錄
generate-sources 生成任何要包含在編譯中的原始碼
process-sources 處理原始碼,例如過濾任何值
generate-resources 生成資源以包含在包中
process-resources 將資源複製並處理到目標目錄中,以備打包
compile 編譯專案的原始碼
process-classes 對編譯後生成的檔案進行後處理,例如對Java類進行位元組碼增強
generate-test-sources 生成任何測試原始碼以包含在編譯中
process-test-sources 處理測試原始碼,例如過濾所有值
generate-sources 生成任何要包含在編譯中的原始碼
generate-test-resources 建立測試資源
process-test-resources 將資源複製並處理到測試目標目錄中
test-compile 將測試原始碼編譯到測試目標目錄中
process-test-classes 從測試編譯中對生成的檔案進行後處理,例如對Java類進行位元組碼增強。對於Maven 2.0.5及更高版本
test 使用合適的單元測試框架執行測試。這些測試不應要求打包或部署程式碼
prepare-package 在實際包裝之前執行準備包裝所需的任何操作。這通常會導致包裝的未包裝,已處理版本。(Maven 2.1及更高版本)
package 獲取編譯後的程式碼,並將其打包為可分發格式,例如JAR
pre-integration-test 在執行整合測試之前執行所需的操作。這可能涉及諸如設定所需環境的事情
integration-test 處理該程式包,並在必要時將其部署到可以執行整合測試的環境中
post-integration-test 在執行整合測試後執行所需的操作。這可能包括清理環境
verify 執行任何檢查以確認包裝有效並符合質量標準
install 將軟體包安裝到本地儲存庫中,以作為本地其他專案中的依賴項
deploy 在整合或發行環境中完成後,將最終程式包複製到遠端儲存庫,以便與其他開發人員和專案共享

site

階段 描述
pre-site 在實際專案站點生成之前執行所需的過程
site 生成專案的站點檔案
post-site 執行完成站點生成併為站點部署做準備所需的過程
site-deploy 將生成的站點檔案部署到指定的Web伺服器

命令

更詳細的請參考官方描述

命令 描述
mvn clean 清理臨時檔案(例如target)
mvn compile 編譯(例如src/main/java)
mvn test 測試(例如src/test/java/下junit的測試用例)
mvn package 打包(target目錄生成jar或war等檔案)
mvn install 將打包的jar/war檔案複製到你的本地倉庫中,供其他模組使用
mvn deploy 將打包的檔案釋出到遠端參考,提供其他人員進行下載依賴
mvn site 生成專案相關資訊的網站
mvn eclipse:eclipse 將專案轉化為Eclipse專案
mvn dependency:tree 打印出專案的整個依賴樹
mvn archetype:generate 建立Maven的普通java專案
mvn tomcat:run 在tomcat容器中執行web應用
mvn jetty:run 呼叫 Jetty 外掛的 Run 目標在 Jetty Servlet 容器中啟動 web 應用
mvn package -Dmaven.test.skip=true 打包但是不測試

profile

配置動態打包

  • 配置
<profiles>
    <profile>
        <!-- 開發環境 -->
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
        <activation>
            <!-- 預設啟用 -->
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <!-- 測試環境 -->
        <id>beta</id>
        <properties>
            <profiles.active>beta</profiles.active>
        </properties>
    </profile>
    <profile>
        <!-- 釋出環境 -->
        <id>prod</id>
        <properties>
            <profiles.active>release</profiles.active>
        </properties>
    </profile>
</profiles> 

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <!--先全部排除-->
        <excludes>
            <exclude>application*.properties</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <!--打包相應的配置檔案-->
        <filtering>true</filtering>
        <includes>
            <include>application.properties</include>
            <include>application-${profile.active}.properties</include>
        </includes>
    </resource>
</resources>
複製程式碼
  • 命令
mvn clean package -P<profile_name>
複製程式碼

POM

標籤 描述
project 所有Maven pom.xml檔案中的頂級元素
modelVersion 物件模型的版本
groupId 專案的組織或組的唯一識別符號(通常域名倒置)
artifactId 專案名稱
packaging 打包型別(例如JAR,WAR,EAR等)
version 專案版本
name 指示用於專案的顯示名稱。這通常在Maven的生成檔案中使用
url 指示可以在哪裡找到專案的站點。這通常在Maven的生成檔案中使用
description 專案的基本描述
type 專案型別
scope 參與到哪個階段(例如test表示僅僅參與到測試)

常見屬性

scope屬性

屬性 描述
compile 預設配置,適用於所有階段,會隨著專案一起釋出
provided 同compile,只是在打包階段exclude
runtime 同compile,不參與編譯,執行時載入
test 只在測試時使用,用於編譯和執行測試程式碼。不會隨專案釋出
system 配合systemPath,從本地系統獲取jar
  • Optional & Exclusions
    • Optional:Project-A -> Project-B -> Project-C,Project-C中使用true,可以傳遞到Project-B,無法傳遞到Project-A(需主動依賴)
    • Exclusions:排除傳遞過來的依賴

版本號說明

  • 語義化的版本控制
    • 2.1.9.RELEASE
      • 2 :主版本
      • 1 :次版本(功能增刪但保持相容)
      • 9 :增量版(bug修復)
      • RELEASE :SNAPSHOT:開發版 -> M: 里程碑 -> RELEASE: 正式版
  • Release Trains(Spring Cloud)
    • Greenwich.SR1
      • Greenwich: A->G,所以是第七代(倫敦地鐵站名)
      • SR1: Service Release 1 正式版的第一個bug修復版本

最後

文章若有謬誤之處,希望廣大讀者指正,互相交流,共同提高。