Maven倉庫、指令、配置文件、插件詳解及idea Maven項目操作

Maven


1.簡介

  • 解決包管理太麻煩、項目對包依賴的複雜關係的相關問題

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

2.作用

  • 項目構架:編譯 -->測試–>打包–>運行

  • 依賴管理:jar包管理

  • 項目聚合:

    Maven\Gradle\Ant

3.安裝

  1. 下載

  2. 配置環境變量(配置完畢後通過調用mvn -version進行測試)

    變量名
    MAVEN_HOME MAVEN項目根目錄
    %MAVEN%\bin 添加到Path路徑
  3. 文件夾目錄

    bin:含有mvn運行腳本

    boot:含有plexus-classworlds類加載器框架

    lib:含有Maven運行時所需要的java類庫

    conf:含有setting.xml配置文件

    Setting:默認repository倉庫路徑($(user)/.m2/repository),通過Maven下載的jar包都會保存在該路徑

4.倉庫配置setting.xml

  • 本地倉庫:就是Maven在本機存儲構件的地方。maven的本地倉庫,在安裝maven後並不會創建,它是在第一次執行 maven命令的時候才被創建。maven本地倉庫的默認位置:在用戶的目錄下都只有一個.m2/repository/的倉庫目錄;可以修改。

    <localRepository> E:/repository/maven/repos</localRepository>
    
  • 中央倉庫:包含了絕大多數流行的開源Java構件,以及源碼、作者信息、SCM、信息、許可證信息等。開源的Java項目依賴的構件都可以在這裏下載到。
    中央倉庫的地址:http://repo1.maven.org/maven2/

  • 私服:是一種特殊的遠程倉庫,它是架設在局域網內的倉庫。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LDOvZMdY-1571881204071)(G:\QF\Markdown\pic\Pharse3\Maven\倉庫聯繫.png)]

5.私服搭建(瞭解面試):nexus maven

  1. 解壓文件

  2. 配置環境變量

    變量名
    NEXUS_HOME 安裝地址(解壓地址)
    %NEXUS_HOME%\bin 加入Path路徑
  3. 打開命令行執行命令

    C:\Users\Administrator>nexus install     安裝服務
    C:\Users\Administrator>nexus start        啓動服務
    C:\Users\Administrator>nexus uninstall  卸載服務
    
  4. 訪問私服

    默認賬戶:admin 密碼:admin123 訪問路徑:http://localhost:8081/nexus

    NEXUS內部使用Jetty作爲服務器,界面通過ext.js開發

  5. 倉庫分類 私服倉庫分類

    • host倉庫—>內部項目的發佈倉庫

    • Snapshots 發佈內部snapshots版本的倉庫

    • Releases 發佈內部release版本的倉庫

      Snapshot版本代表不穩定、尚處於開發中的版本,快照版本。

      Release版本則代表穩定的版本,發行版本。

      3rd party 發佈第3方jar包的倉庫,如oracle數據庫驅動,open-189.jar

    • proxy倉庫—>從遠程中心倉庫查找jar包的倉庫

    • Apache Snapshots 查找Apache項目的快照版本的倉庫

    • Central 中心倉庫http://repo1.maven.org/maven2/

    • Codehaus Snapshots 查找Codehaus 的快照版本的倉庫

    • group倉庫—>把倉庫按組劃分,以組爲單位進行管理

    • virtual倉庫

  6. 私服的配置/Repository的配置

    在parent模塊的pom.xml中加入私服的配置,讓Maven從私服下載jar包,而不直接去遠程倉庫下載。

    默認情況下,Maven下載jar包將直接連接到外網http://repo1.maven.org/maven2/去下載;

    安裝私服之後,讓Maven下載jar包先從私服查找,如果沒有,再從外網下載並保存在私服上

    在POM在加入下面的配置,其中url爲NEXUS私服的Public Repository對外的地址

    以後,Maven下載構建(jar包或插件)都將從這裏開始下載

    <!--配置私服-->
    <profiles>  
         <profile>  
          <id>profile-nexus</id>  
      
          <repositories>  
            <repository>  
              <id>nexus</id>  
              <url>http://localhost:8081/nexus/content/groups/public/</url>  
              <snapshots><enabled>true</enabled></snapshots>  
              <releases><enabled>true</enabled></releases>  
            </repository>  
          </repositories>  
          <pluginRepositories>  
            <pluginRepository>  
              <id>nexus</id>  
              <url>http://localhost:8081/nexus/content/groups/public/</url>  
              <snapshots><enabled>true</enabled></snapshots>  
              <releases><enabled>true</enabled></releases>  
            </pluginRepository>  
          </pluginRepositories>  
        </profile>  
      </profiles>  
    <activeProfiles>  
      <activeProfile>profile-nexus</activeProfile>  
    </activeProfiles>
    
    

6.替換阿里雲鏡像

<!--在setting.xml文件中配置-->
<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

7.idea集成Maven

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

項目目錄 概述
${basedir} 存放pom.xml文件和所有子目錄
${basedir}/src/main/java 存放java源代碼
${basedir}/src/main/resources 存放項目資源文件,如properties配置文件
${basedir}/src/test/java 存放測試類源碼,比如Junit代碼
${basedir}/src/test/resources 存放測試需要的資源文件
${basedir}/target 存放編譯後 的 classes 會放在 basedir/target/classes 下面, 和生成的JAR 文件

8.Maven常用命令(面試重點)

  • 編譯源代碼: mvn compile

  • 編譯測試代碼:mvn test-compile

  • 清除產生的項目:mvn clean

  • 運行測試:mvn test

  • 產生site:mvn site 站點:對整個項目的描述

    <!--安裝站點插件-->
    <build>
        <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.7.1</version>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.doxia</groupId>
                    <artifactId>doxia-site-renderer</artifactId>
                    <version>1.8</version>
                </dependency>
            </dependencies>
        </plugin>
        </plugins>
    </build>
    
  • 打包:mvn package

  • 在本地Repository中安裝jar:mvn install

  • 上傳項目到遠程倉庫:mvn deploy(更多是私服,需要用戶名密碼等認證)

9.Maven項目生命週期(面試重點)

三套生命週期:

  • Clean 清理項目對應命令: mvn clean

  • Default 最核心的生命週期 :

    • 驗證:mvn validate

    • 編譯:mvn compile

    • 測試:mvn test

    • 打包:mvn pagkage

    • 安裝到倉庫:mvn install

    • 發佈到遠程倉庫/私庫:mvn deploy

  • Site 生成站點:mvn site

    clean、default、site

    clean: 主要目的是清理項目

    pre-clean: 執行一些清理前需要完成的工作

    clean: 清理上一次構建生成的文件

    post-clean: 執行一些清理後需要完成的工作

    default:定義了真正構建時所需要執行的所有步驟,它是生命週期中最核心的部分

    validate

    initialize

    generate-sources

    process-sources: 處理項目主資源文件。一般來說,是對src/main/resources目錄的內容進行變量替換等工作後,複製到項目輸出的主classpath目錄中

    generate-resources

    process-resources

    compile: 編譯項目的主源碼。一般來說,是編譯src/main/java目錄下的Java文件至項目輸出的主classpath目錄中target

    process-classes

    generate-test-sources

    process-test-sources: 處理項目測試資源文件。一般來說,是對src/test/resources目錄的內容進行變量替換等工作後,複製到項目輸出的測試classpath目錄中

    generate-test-resources

    process-test-resources

    test-compile: 編譯項目的測試代碼,一般來說,是編譯src/test/java目錄下的Java文件至項目輸出的測試classpath目錄中

    process-test-classes

    test: 使用單元測試框架運行測試,測試代碼不會打包或部署

    prepare-package

    package: 接受編譯好的代碼,打包成可發佈的格式,如JAR

    pre-integration-test

    integration-test

    post-integration-test

    verify

    install: 將包安裝到Maven本地倉庫,供本地其他Maven項目使用

    deploy: 將最終的包複製到遠程倉庫,供其他開發人員和Maven項目使用

    site生命週期: 建立和發佈項目站點,Maven能夠基於POM所包含的信息,自動生成站點

    pre-site: 執行一些在生成項目站點之前需要完成的工作

    site: 生成項目站點文檔

    post-site: 執行一些在生成項目站點之後需要完成的工作

    site-deploy: 將生成的項目站點發布到服務器上

10.pom.xml詳解(開發重要階段)

  • 基本配置

    pom.xml

    <!--固定的-->
    <modelVersion>4.0.0</modelVersion>
    <!--描述當前項目的組織-->
    <groupId>cn.cdqf</groupId>
    <!--描述當前項目的唯一id-->
    <artifactId>maven_01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--定義打包的方式
    jar:默認方式
    war: web項目最終打成war包 放在服務器上運行
    pom:其它項目的父親
    -->
    <packaging>war</packaging>
    <!--spring jar包有50個 組織+id+版本
        定義常量
    -->
    <properties>
        <junit.version>4.12</junit.version>
    </properties>
    <!--項目所有依賴都寫在這裏面
           每一個<dependency>就表示一個依賴
        groupId+artifactId+version :精確在倉庫中定位一個jar
    -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <!--依賴範圍-->
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
            <!--排除當前jar依賴的某個jar包 一般在jar包衝突的時候使用-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    
    
    <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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
     
    	<!-- 模型版本。maven2.0必須是這樣寫,現在是maven2唯一支持的版本 -->
    	<modelVersion>4.0.0</modelVersion>
     
    	<!-- 公司或者組織的唯一標誌,並且配置時生成的路徑也是由此生成, 如com.winner.trade,maven會將該項目打成的jar包放本地路徑:/com/winner/trade -->
    	<groupId>com.winner.trade</groupId>
     
    	<!-- 本項目的唯一ID,一個groupId下面可能多個項目,就是靠artifactId來區分的 -->
    	<artifactId>trade-core</artifactId>
     
    	<!-- 本項目目前所處的版本號 -->
    	<version>1.0.0-SNAPSHOT</version>
     
    	<!-- 打包的機制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默認爲jar -->
    	<packaging>jar</packaging>
     
    	<!-- 幫助定義構件輸出的一些附屬構件,附屬構件與主構件對應,有時候需要加上classifier才能唯一的確定該構件 不能直接定義項目的classifer,因爲附屬構件不是項目直接默認生成的,而是由附加的插件幫助生成的 -->
    	<classifier>...</classifier>
     
    	<!-- 定義本項目的依賴關係 -->
    	<dependencies>
     
    		<!-- 每個dependency都對應這一個jar包 -->
    		<dependency>
     
    			<!--一般情況下,maven是通過groupId、artifactId、version這三個元素值(俗稱座標)來檢索該構件, 然後引入你的工程。如果別人想引用你現在開發的這個項目(前提是已開發完畢併發布到了遠程倉庫),--> 
    			<!--就需要在他的pom文件中新建一個dependency節點,將本項目的groupId、artifactId、version寫入, maven就會把你上傳的jar包下載到他的本地 -->
    			<groupId>com.winner.trade</groupId>
    			<artifactId>trade-test</artifactId>
    			<version>1.0.0-SNAPSHOT</version>
     
    			<!-- maven認爲,程序對外部的依賴會隨着程序的所處階段和應用場景而變化,所以maven中的依賴關係有作用域(scope)的限制。 -->
    			<!--scope包含如下的取值:compile(編譯範圍)、provided(已提供範圍)、runtime(運行時範圍)、test(測試範圍)、system(系統範圍) -->
    			<scope>test</scope>
     
    			<!-- 設置指依賴是否可選,默認爲false,即子項目默認都繼承:爲true,則子項目必需顯示的引入,與dependencyManagement裏定義的依賴類似  -->
    			<optional>false</optional>
     
    			<!-- 屏蔽依賴關係。 比如項目中使用的libA依賴某個庫的1.0版,libB依賴某個庫的2.0版,現在想統一使用2.0版,就應該屏蔽掉對1.0版的依賴 -->
    			<exclusions>
    				<exclusion>
    					<groupId>org.slf4j</groupId>
    					<artifactId>slf4j-api</artifactId>
    				</exclusion>
    			</exclusions>
     <!--依賴衝突包:使用路勁最短,以及優先聲明原則-->
    		</dependency>
     
    	</dependencies>
     
    	<!-- 爲pom定義一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->
    	<properties>
    		<file.encoding>UTF-8</file.encoding>
    		<java.source.version>1.5</java.source.version>
    		<java.target.version>1.5</java.target.version>
    	</properties>
     
    	...	
    </project>
    
    
  • Scope介紹(面試重點)

    scope定義了依賴的範圍,默認是compile

    • compile:編譯依賴範圍,使用此依賴範圍對於編譯、測試、運行三種classpath都有效,即在編譯、測試和運行時都要使用該依賴jar包
    • test:測試依賴範圍,只對測試有效,表明只在測試的時候需要,在編譯和運行時將無法使用該類依賴,如 junit
    • provided:已提供依賴範圍。編譯和測試有效,運行無效。如servlet-api,在項目運行時,tomcat等容器已經提供,無需Maven重複引入
    • runtime:運行時依賴範圍。測試和運行有效,編譯無效。如 jdbc 驅動實現,編譯時只需接口,測試或運行時才需要具體的 jdbc 驅動實現;
    • system:系統依賴範圍,使用system範圍的依賴時必須通過systemPath元素顯示地指定依賴文件的路徑,不依賴Maven倉庫解析,所以可能會造成建構的不可移植,謹慎使用
  • jar包衝突(面試重點)

    傳遞依賴:某個sdk(寫得好的項目)首先這個項目會依賴某些jar,其它人 用到該sdk 需要導入sdk 的jar,也會傳遞導入sdk依賴jar

在這裏插入圖片描述

 引入條件:

在這裏插入圖片描述

 ```xml
 <dependency>
     <groupId>io.springfox</groupId>
     <artifactId>springfox-swagger-ui</artifactId>
     <version>2.9.2</version>
     <!--排除當前jar依賴的某個jar包 一般在jar包衝突的時候使用-->
     <exclusions>
         <exclusion>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </exclusion>
     </exclusions>
 </dpendency>
 
 ```
  • 其他配置(瞭解)

    構建配置
    分發配置
    倉庫配置
    profile配置 報表配置
    環境配置

11.常用插件

<build>
    <plugins>
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <encoding>UTF-8</encoding>    <!--配置資源文件編碼-->
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <source>1.8</source> <!-- 源代碼使用jdk1.8支持的特性 -->
                <target>1.8</target> <!-- 使用jvm1.8編譯目標代碼 -->
                <compilerArgs> <!-- 傳遞參數 -->
                    <arg>-parameters</arg>
                    <arg>-Xlint:unchecked</arg>
                    <arg>-Xlint:deprecation </arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>
插件名稱 用途 來源
maven –clean -plugin 清理項目 Apache
maven –compile -plugin 編譯項目 Apache
maven –deploy -plugin 部署項目 Apache
maven –install -plugin 安裝項目 Apache
maven –resources -plugin 處理資源文件 Apache
maven –site -plugin 生成站點 Apache
maven –surefire -plugin 執行測試 Apache
maven –jar -plugin 構建JAR項目 Apache
maven –war -plugiin 構建war項目 Apache
maven –shade -plugin 構建包含遺憾的JAR包 Apache
maven –changelog -plugin 生產版本控制變更報告 Apache
maven –checkstyle -plugin 生成checkStyle報告 Apache
maven –javadoc –plugin 生成JavaDoc文檔 Apache
maven –pmd –plugin 生成PMD報告 Apache
maven –project –info -reports –plugin 生成項目信息報告 Apache
maven –surefire –plugin 生成單元測試報告 Apache
maven -archetype –plugin 基於Archetype生成項目骨架 Apache
maven –assembly –plugin 構建自定義格式的分佈包 Apache
maven –dependency –plugin 依賴分析及控制 Apache
maven –enforcer –plugin 定義規則並強制要求遵守 Apache
maven –pgp –plugin 爲項目構建生成PGP簽名 Apache
maven -invoke –plugin 自動運行Maven項目構建並驗證 Apache
maven –release –plugin 自動項目版本發佈 Apache
maven –scm –plugin 集成版本控制系統 Apache
maven –source –plugin 生成源碼包 Apache
properties –maven –plugin 從properties文件讀寫Maven屬性 Codehaus
sql –maven –plugin 運行SQL腳本 Codehaus
tomcat –maven –plugin 啓動、停止、部署項目 Codehaus
versions –maven –plugin 自動化批量更新POM版本 Codehaus
cargo –maven –plugin 啓動/停止/配置各類Web容器自動化部署Web項目 Cargo
jetty –maven –plugin 集成jetty容器,實現快速開發測試 Eclipse

12.Maven聚合(重點難點)

好處:模塊重用

New—>project---->emptyproject
在這裏插入圖片描述
在這裏插入圖片描述

  • 父模塊

在這裏插入圖片描述

  • Util模塊
    在這裏插入圖片描述
  • Dao模塊
    在這裏插入圖片描述
  • Controller模塊
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章