最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Maven基礎(chǔ)知識(shí)大梳理

 更新時(shí)間:2021年08月24日 17:11:06   作者:小小張自由—>張有博  
這篇文章主要是Maven基礎(chǔ)知識(shí)大梳理,Maven主要是用來解決導(dǎo)入java類依賴的jar,編譯java項(xiàng)目主要問題,大家可以讀一讀這篇文章,更深一步的了解Maven

Maven工程基礎(chǔ)知識(shí)

       maven 工程中不直接將 jar 包導(dǎo)入到工程中,而是通過在 pom.xml 文件中添加所需 jar包的坐標(biāo),這樣就很好的避免了 jar 直接引入進(jìn)來,在需要用到 jar 包的時(shí)候,只要查找 pom.xml 文件,再通過 pom.xml 文件中的坐標(biāo),到一個(gè)專門用于”存放 jar 包的倉庫”(maven 倉庫)中根據(jù)坐標(biāo)從而找到這些 jar 包,再把這些 jar 包拿去運(yùn)行。

       為了解決這個(gè)過程中速度慢的問題,maven 中也有索引的概念,通過建立索引,可以大大提高加載 jar 包的速度

Maven倉庫的分類

本地倉庫 :用來存儲(chǔ)從遠(yuǎn)程倉庫或中央倉庫下載的插件和 jar 包,項(xiàng)目使用一些插件或 jar 包,優(yōu)先從本地倉庫查找

遠(yuǎn)程倉庫:如果本地需要插件或者 jar 包,本地倉庫沒有,默認(rèn)去遠(yuǎn)程倉庫下載(私服)。

中央倉庫:在 maven 軟件中內(nèi)置一個(gè)遠(yuǎn)程倉庫地址https://www.mvnrepository.com/ ,它是中央倉庫,服務(wù)于整個(gè)互聯(lián)網(wǎng)。

Maven常用命令的含義

    compile:編譯--- compile 是 maven 工程的編譯命令,作用是將 src/main/java 下的文件編譯為 class 文件輸出到 target目錄下。

    clean:清理--- clean 是 maven 工程的清理命令,執(zhí)行 clean 會(huì)刪除 target 目錄及內(nèi)容。

    test:測(cè)試--- test 是 maven 工程的測(cè)試命令 mvn test,會(huì)執(zhí)行 src/test/java 下的單元測(cè)試類。

    package:打包---package 是 maven 工程的打包命令,對(duì)于 java 工程執(zhí)行 package 打成 jar 包,對(duì)于 web 工程打成 war包。

    install:安裝--- install 是 maven 工程的安裝命令,執(zhí)行 install 將 maven 打成 jar 包或 war 包發(fā)布到本地倉庫

一個(gè)項(xiàng)目生命周期

打包類型:<packaging >

jar:執(zhí)行 package 會(huì)打成 jar 包

war:執(zhí)行 package 會(huì)打成 war 包

pom :用于 maven 工程的繼承,通常父工程設(shè)置為 pom

依賴范圍:<scope>

A 依賴 B,需要在 A 的 pom.xml 文件中添加 B 的坐標(biāo),添加坐標(biāo)時(shí)需要指定依賴范圍,依賴范圍包括:

compile:compile指 A 在編譯時(shí)依賴 B,此范圍為默認(rèn)依賴范圍。編譯范圍的依賴會(huì)用在編譯、測(cè)試、運(yùn)行,由于運(yùn)行時(shí)需要所以編譯范圍的依賴會(huì)被打包。

provided:provided 依賴只有在當(dāng) JDK 或者一個(gè)容器已提供該依賴之后才使用, provided 依賴在編譯和測(cè)試時(shí)需要,在運(yùn)行時(shí)不需要,比如:servlet api 被 tomcat 容器提供。

runtime:runtime 依賴在運(yùn)行和測(cè)試系統(tǒng)的時(shí)候需要,但在編譯的時(shí)候不需要。比如:jdbc的驅(qū)動(dòng)包。由于運(yùn)行時(shí)需要所以 runtime 范圍的依賴會(huì)被打包。

test:test 范圍依賴 在編譯和運(yùn)行時(shí)都不需要,它們只有在測(cè)試編譯和測(cè)試運(yùn)行階段可用,比如:junit。由于運(yùn)行時(shí)不需要所以 test范圍依賴不會(huì)被打包。

system:system 范圍依賴與 provided 類似,但是你必須顯式的提供一個(gè)對(duì)于本地系統(tǒng)中 JAR文件的路徑,需要指定 systemPath 磁盤路徑,system依賴不推薦使用。

依賴范圍由強(qiáng)到弱的順序是:compile>provided>runtime>test

pom文件中常用標(biāo)簽的含義

<?xml version="1.0" encoding="UTF-8"?>
<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>
 <!--聲明項(xiàng)目描述符遵循哪一個(gè)POM模型版本。4.0.0-->
 
    <groupId>com.tfjybj</groupId>
    <artifactId>super</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>
    
    <!--項(xiàng)目的名稱, Maven產(chǎn)生的文檔用-->
    <name>super</name>
    <!-- 項(xiàng)目的詳細(xì)描述, Maven 產(chǎn)生的文檔用。-->
    <description>super</description>
 
    <!--聚合  來管理同個(gè)項(xiàng)目中的其他模塊-->
    <modules>
        <module>super-common</module>
        <module>super-gateway</module>
        <module>super-zipkin</module>
        <module>super-provider</module>
        <module>super-provider-api</module>
    </modules>
 
    <!--繼承  說明這是一個(gè)boot工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
    </parent>
 
 
    <!--統(tǒng)一管理jar包版本-->
    <properties>
        <!--項(xiàng)目編碼方式,maven編譯版本-->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
          <!--統(tǒng)一管理jar包版本-->
        <spring.cloud.version>2.1.0.RELEASE</spring.cloud.version>
        <spring.boot.version>2.1.8.RELEASE</spring.boot.version>
        <mysql.version>6.0.6</mysql.version>
    </properties>
 
    <!--統(tǒng)一管理版本號(hào)-->
    <!--在父工程pom文件中聲明依賴,但不引入,父項(xiàng)目聲明,供子項(xiàng)目按需引入-->
    <dependencyManagement>
        <dependencies>
            <!-- nacos服務(wù)注冊(cè)/發(fā)現(xiàn)-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>${spring.cloud.version}</version>
                 <!--排除ribbon的依賴-->
               <exclusions>
                   <exclusion>
                       <groupId>org.springframework.cloud</groupId>
                       <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--nacos配置中心來做配置管理-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>${spring.cloud.version}</version>
            </dependency>
             <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
               <!--  mysql依賴的作用范圍-->
                <scope>runtime</scope>
            </dependency>
           
        </dependencies>
    </dependencyManagement>
 
    <!--所有聲明在父項(xiàng)目 dependencies 中的依賴都會(huì)自動(dòng)引入,并默認(rèn)被所有子項(xiàng)目繼承-->
    <!--即使在子項(xiàng)目中不引入該依賴,那么子項(xiàng)目依然會(huì)從父項(xiàng)目中繼承該依賴項(xiàng)。-->
    <dependencies>
 
    </dependencies>
 
    <!--發(fā)現(xiàn)依賴和擴(kuò)展的遠(yuǎn)程倉庫列表  -->
    <!--遠(yuǎn)程倉庫列表,它是Maven用來填充本地倉庫所使用的一組遠(yuǎn)程項(xiàng)目。 -->
    <repositories>
        <!--包含需要連接到遠(yuǎn)程倉庫的信息-->
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
 
    <!--用于項(xiàng)目打包,打包需要的插件-->
     <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

聚合與繼承的關(guān)系

     1、聚合主要是為了方便快速構(gòu)建項(xiàng)目,繼承主要是為了消除重復(fù)配置

  2、對(duì)于聚合模塊而言,它知道有哪些被聚合的模塊,但那些被聚合的模塊不知道這個(gè)聚合模塊的存在;對(duì)于繼承的父pom 而言,它不知道有哪些子模塊繼承它,但那些子模塊都必須知道自己的父pom 是什么

  3、聚合pom 與繼承中的父pom 的 packaging 都必須是 pom;同時(shí),聚合模塊與繼承中的父模塊除了 pom 外,都沒有實(shí)際的內(nèi)容

依賴沖突

         Maven的依賴機(jī)制會(huì)導(dǎo)致Jar包的沖突。

          舉個(gè)例子,現(xiàn)在你的項(xiàng)目中,使用了兩個(gè)Jar包,分別是A和B。現(xiàn)在A需要依賴另一個(gè)Jar包C,B也需要依賴C。但是A依賴的C的版本是1.0,B依賴的C的版本是2.0。這時(shí)候,Maven會(huì)將這1.0的C和2.0的C都下載到你的項(xiàng)目中,這樣你的項(xiàng)目中就存在了不同版本的C,這時(shí)Maven會(huì)依據(jù)依賴路徑最短優(yōu)先原則,來決定使用哪個(gè)版本的Jar包,而另一個(gè)無用的Jar包則未被使用,這就是所謂的依賴沖突。

依賴調(diào)節(jié)原則

1.第一聲明者優(yōu)先原則

在pom文件定義依賴,以先聲明的依賴為準(zhǔn)。

誰先在pom.xml中申明,就用誰的。跟坐標(biāo)代碼的順序有關(guān)

2.路徑近者優(yōu)先原則

以上兩個(gè)jar包都依賴了spring-beans。

spring-context和spring-webmvc都會(huì)傳遞過來spring-beans,那如果直接把spring-beans的依賴寫在pom文件中,那么項(xiàng)目就不會(huì)再使用其他依賴傳遞過來的spring-beans。

因?yàn)樽约褐苯釉趐om中定義spring-beans要比其他依賴傳遞過來的路徑要近。

3.排除依賴原則

使用Maven中的<exclusions>標(biāo)簽,例如

     <!--使用的openfeign-->
     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.1.RELEASE</version>
            <exclusions>
                 <exclusion>
                     <groupId>org.springframework.cloud</groupId>
                     <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                 </exclusion>
            </exclusions>
     </dependency>

4.鎖定版本原則

面對(duì)眾多的依賴,有一種方法不用考慮依賴路徑、聲明優(yōu)化等因素可以采用直接鎖定版本的方法確定依賴構(gòu)件的版本,版本鎖定后則不考慮依賴的聲明順序或依賴的路徑,以鎖定的版本的為準(zhǔn)添加到工程中,此方法在企業(yè)開發(fā)中常用。

解決依賴沖突-使用MavenHelper

在idea中下載插件mavenHelper解決依賴沖突,使用步驟看圖

找到?jīng)_突,點(diǎn)擊右鍵,然后選擇Exclude即可排除沖突版本的Jar包。

以上就是Maven基礎(chǔ)知識(shí)大梳理的詳細(xì)內(nèi)容,更多關(guān)于Maven基礎(chǔ)知識(shí)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在Java中使用基本的正則表達(dá)式

    在Java中使用基本的正則表達(dá)式

    這篇文章主要介紹了在Java中使用基本的正則表達(dá)式,本文通過簡(jiǎn)要的案例,說明了很多場(chǎng)景下的正則表達(dá)式的用法,列出了正則表達(dá)式匹配規(guī)則的表格,需要的朋友可以參考下
    2021-07-07
  • 詳解Java中native方法的使用

    詳解Java中native方法的使用

    native是與C++聯(lián)合開發(fā)的時(shí)候用的!使用native關(guān)鍵字說明這個(gè)方法是原生函數(shù),也就是這個(gè)方法是用C/C++語言實(shí)現(xiàn)的,并且被編譯成了DLL,由java去調(diào)用。本文給大家介紹java 中native方法使用,感興趣的朋友一起看看吧
    2020-09-09
  • Java實(shí)現(xiàn)克隆的三種方式實(shí)例總結(jié)

    Java實(shí)現(xiàn)克隆的三種方式實(shí)例總結(jié)

    這篇文章主要介紹了Java實(shí)現(xiàn)克隆的三種方式,結(jié)合實(shí)例形式總結(jié)分析了java淺復(fù)制、深復(fù)制以及使用serializable實(shí)現(xiàn)深復(fù)制的相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • java實(shí)現(xiàn)一個(gè)簡(jiǎn)單TCPSocket聊天室功能分享

    java實(shí)現(xiàn)一個(gè)簡(jiǎn)單TCPSocket聊天室功能分享

    這篇文章主要為大家分享了java實(shí)現(xiàn)的一個(gè)簡(jiǎn)單TCPSocket聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Java編程時(shí)間日期API實(shí)例解析

    Java編程時(shí)間日期API實(shí)例解析

    本文主要介紹了Java編程時(shí)間日期API實(shí)例解析的相關(guān)內(nèi)容,分享了一則實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2018-01-01
  • Java中BigDecimal的基本運(yùn)算(詳解)

    Java中BigDecimal的基本運(yùn)算(詳解)

    下面小編就為大家?guī)硪黄狫ava中BigDecimal的基本運(yùn)算(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 快速排序算法在Java中的實(shí)現(xiàn)

    快速排序算法在Java中的實(shí)現(xiàn)

    這篇文章主要介紹了快速排序算法在Java中的實(shí)現(xiàn),簡(jiǎn)單介紹了快速排序的實(shí)現(xiàn)原理,分享了兩種實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • IDEA?code?template配置和參數(shù)方式

    IDEA?code?template配置和參數(shù)方式

    這篇文章主要介紹了IDEA?code?template配置和參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教<BR>
    2024-01-01
  • Spring @Conditional注解原理解析

    Spring @Conditional注解原理解析

    這篇文章主要介紹了Spring @Conditional注解原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Idea中SpringBoot多模塊項(xiàng)目的建立實(shí)現(xiàn)

    Idea中SpringBoot多模塊項(xiàng)目的建立實(shí)現(xiàn)

    這篇文章主要介紹了Idea中SpringBoot多模塊項(xiàng)目的建立實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論

应城市| 济源市| 门源| 于都县| 周口市| 余江县| 安阳县| 新田县| 沂源县| 琼中| 普安县| 桓台县| 武宣县| 泗水县| 乌拉特前旗| 剑川县| 沭阳县| 洛宁县| 尼木县| 同德县| 邹平县| 温泉县| 辉县市| 永城市| 丰顺县| 乌兰察布市| 洛浦县| 张家口市| 成都市| 延边| 库伦旗| 山东| 攀枝花市| 嘉义市| 湘潭市| 辽阳市| 仲巴县| 安乡县| 涡阳县| 离岛区| 东兰县|