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

Maven版本依賴pom文件內(nèi)容及使用剖析

 更新時間:2023年05月17日 09:30:01   作者:跡_Jason  
這篇文章主要為大家介紹了Maven版本依賴pom文件內(nèi)容及使用剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

pom.xml文件

<groupId>org.son.nexus</groupId>//項目隸屬的實際項目名
<artifactId>nexus-indexer</artifactId>//實際項目中的一個maven項目模塊名稱
<version>2.0.0</version>//版本號
<packaging>jar</packaging>//當(dāng)前maven項目打包的方式,默認為jar

以上的配置會獲得一個<artifactId>-<version>.<packaging>格式的包//nexus-indexer-2.0.0.jar

<classifier>jdk7</classifier>//用于定義構(gòu)建輸出的一些附屬的構(gòu)建。classifier是不能直接定義的,只能存在附加的構(gòu)件(插件)時,才能(必須)添加。在包名上也會有所提現(xiàn)(nexus-indexer-2.0.0-javadoc.jar)

jar包在倉庫中的路徑規(guī)律:groupId/artifactId/version/groupId-version

依賴倉庫

groupId、artifactId、version為基本坐標(biāo)

type為依賴類型,默認為jar

scope為依賴范圍

  • compile:編譯,測試,運行三種classpath都有效
  • test:只對測試有效
  • provided:編譯和測試有效
  • runtime:測試和運行有效
  • system:系統(tǒng)依賴,依賴的包是從計算機本地導(dǎo)入,與systemPath配合使用
  • ? <systemPath>${java.home}/lib/rt.jar</systemPath>
  • ? <scope>system</scope>

傳遞性依賴

maven默認就是支持的。

什么是傳遞性依賴?

比如:現(xiàn)在要導(dǎo)入A.jar包,但A.jar有依賴于B.jar,在maven中就會默認導(dǎo)入B.jar,而不需要手動去導(dǎo)入。

scope最好設(shè)為compile

傳遞性依賴存在一個問題:工程中存在兩個jar分別依賴的是B.jar的不同版本jar包,就會出現(xiàn)錯誤。

optional:可選依賴,true 不會傳遞,false會傳遞(默認)

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.10</version>
<optional>true</optional>
</dependency>

當(dāng)其他項目C依賴B項目時,mysql-connector-java的依賴不會發(fā)生傳遞給C

優(yōu)點:

減少沖突,不用的功能不傳遞

一個jar應(yīng)該只有 一個職責(zé)原則

exclusions排除依賴

用于替換某個 依賴中的依賴包作用

<dependencies>
    <dependency>
        <groupId>com.juv</groupId>
        <artifactId>project-B</artifactId>
        <version>1.0.0</version>
        <exclusions>
            <exclusion>//可以有多個
                <groupId>com.juv</groupId>
                <artifactId>project-C</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.juv</groupId>
        <artifactId>project-B</artifactId>
        <version>1.1.0</version>
    </dependency>
</dependencies>

該例子的意思:不想使用project-B中版本的project-C依賴包,而將其環(huán)衛(wèi)1.1.0的project-C包

歸類依賴

場景:存在一群版本號一致的依賴,想通過一個統(tǒng)一的配置,將其統(tǒng)一配置和修改

<properties>
    <spring>2.5.6</spring>
</properties>

調(diào)用方式

<version>${spring}</version>

部署至遠程倉庫

修改工程中的pom文件

<project>
    ....
    <distributionManagement>
         <repository>  //發(fā)布版本構(gòu)件的倉庫
            <id></id>  //遠程倉庫的唯一標(biāo)識
            <name></name>   //自定義
            <url></url>   //該倉庫地址
        </repository>
         <snapshotRepository>//快照版本的設(shè)置
            <id></id>
            <name></name>
            <url></url>   
        </snapshotRepository>
    </distributionManagement>
    ....
</project>

如果需要認證,則在setting.xml文件中增加一個<server>元素進行配置

在配置完成后,執(zhí)行mvn clean deploy 就會根據(jù)當(dāng)前版本類型,發(fā)布到相應(yīng)的倉庫中

快照版本

快照不是正式版本,當(dāng)設(shè)為帶有SNAPSHOT的version時,即為快照版本,每次向倉庫部署是,會自動打上時間戳,其他引用快照相同版本時會自動下載更新

例如:2.1-SNAPSHOT時,則會下載2.1-20091214之類的構(gòu)件

在maven本地倉庫的groupId/artifactId/version文件路徑下會存在maven-metadata.xml文件,會記錄版本信息

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>com.android.support</groupId>
  <artifactId>multidex</artifactId>
  <version>1.0.0</version>
  <versioning>
    <versions>
      <version>1.0.0</version>
      <version>1.0.1</version>
    </versions>
    <lastUpdated>20141209014044</lastUpdated>
  </versioning>
</metadata>

maven生命周期

maven的生命周期是抽象的,其實際行為都是由插件來完成的。

maven的生命周期是不做任何實際工作,實際任務(wù)都由插件完成。

maven具有三個獨立的生命周期:clean、defeat、site

1、clean生命周期:清理項目,包含三個phase。

1)pre-clean:執(zhí)行清理前需要完成的工作

2)clean:清理上一次構(gòu)建生成的文件

3)post-clean:執(zhí)行清理后需要完成的工作

2、default生命周期:構(gòu)建項目,重要的phase如下。

1)validate:驗證工程是否正確,所有需要的資源是否可用。
2)compile:編譯項目的源代碼。
3)test:使用合適的單元測試框架來測試已編譯的源代碼。這些測試不需要已打包和布署。
4)Package:把已編譯的代碼打包成可發(fā)布的格式,比如jar。
5)integration-test:如有需要,將包處理和發(fā)布到一個能夠進行集成測試的環(huán)境。
6)verify:運行所有檢查,驗證包是否有效且達到質(zhì)量標(biāo)準。
7)install:把包安裝到maven本地倉庫,可以被其他工程作為依賴來使用。
8)Deploy:在集成或者發(fā)布環(huán)境下執(zhí)行,將最終版本的包拷貝到遠程的repository,使得其他的開發(fā)者或者工程可以共享。

3、site生命周期:建立和發(fā)布項目站點,phase如下

1)pre-site:生成項目站點之前需要完成的工作

2)site:生成項目站點文檔

3)post-site:生成項目站點之后需要完成的工作

4)site-deploy:將項目站點發(fā)布到服務(wù)器

命令行輸入:$mvn clean 其實調(diào)用的是clean生命周期的clean階段,執(zhí)行了pre-clean和clean

而這些命令其實是由插件提供功能的。

自定義綁定插件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>//maven官方,官方的可以省略該標(biāo)簽
            <artifactId>maven-source-plugin</artifactId>//插件
            <version>2.1.1</version>//沒有version時,會默認下載最新的release版本
          <executions>//配置執(zhí)行n個任務(wù)
                <execution>
                       <id>attach-sources</id>//可以任意
                       <phase>verify</phase>//綁定到verify生命周期,在此時才會起作用
                    <goals>
                           <goal>jar-no-fork</goal>//啟用該插件的jar-no-fork功能
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

因為一個插件可能存在多個功能,但我們并不一定所有的功能都需要,所以設(shè)定goal標(biāo)簽,表示我們要實現(xiàn)的功能。

插件配置

命令行配置:$mvn install -Dt 插件相關(guān)參數(shù) //適用于當(dāng)每次運行時,這個插件的配置都會變的情況

pom中全局配置:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
              <source>1.7</source>  //jdk1.7
              <target>1.7</target> //編譯后jdk1.7
            </configuration>
        </plugin>
    </plugins>
</build>

聚合(多模塊)

意義:一次構(gòu)建所有想要構(gòu)建的項目

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.son.nexus</groupId>
    <artifactId>nexus-indexer</artifactId>
    <version>2.0.0</version>
    <packaging>pom</packaging>//本身也是一個maven工程
    <modules>
          <module>account-email</module>//想要構(gòu)建的項目,這里寫的是當(dāng)前pom文件下的相對路徑地址
        <module>account-persilist</module>
    </modules>
</project>

聚合pom文件的packaging標(biāo)簽一定要是pom,其工程就只是一個pom文件,沒有其他的實現(xiàn)代碼

一般來說模塊處的目錄名應(yīng)與其artifactId一致

聚合模塊與其他模塊的目錄結(jié)構(gòu)并非一定要父子關(guān)系

繼承

父pom

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.son.nexus</groupId>
    <artifactId>nexus-indexer</artifactId>
    <version>2.0.0</version>
    <packaging>pom</packaging>//本身也是一個maven工程
     <dependencies>
        <dependency>
            <groupId>com.juv</groupId>
            <artifactId>project-B</artifactId>
            <version>1.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.juv</groupId>
                    <artifactId>project-C</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.juv</groupId>
            <artifactId>project-B</artifactId>
            <version>1.1.0</version>
        </dependency>
    </dependencies>
</project>

父pom的packaging也是pom

子pom

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.son.nexus</groupId>
    <artifactId>nexus-B</artifactId>
    <version>2.0.0</version>
    <packaging>jar</packaging>
    <parent>
        <groupId>org.son.nexus</groupId>
        <artifactId>nexus-C</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>//相對路徑
    </parent>
</project>

子pom的packaging則不一定要是pom,但一定有parent標(biāo)簽

子類的groupId和version也可以繼承與父pom文件

<dependencyManagement>標(biāo)簽

作用:當(dāng)子類不需要父pom中的某些依賴的時,就可以使用。

父pom

<dependencyManagement>
    <dependencies>
        <dependency>
            <artifactId>spring-core</artifactId>
            <groupId>org.springframework</groupId>
            <version>3.1.1.RELEASE</version>
        </dependency>
     </dependencies>
</dependencyManagement>

被<dependencyManagement>標(biāo)簽所包裹的依賴是不會主動被加載進入子pom中,只有子pom中顯式再次聲明的時候才會被依賴

子pom

<dependencies>
    <dependency>
        <artifactId>spring-core</artifactId>
        <groupId>org.springframework</groupId>
    </dependency>
</dependencies>

可以省略version等其他配置,因為父pom中已經(jīng)配置過了

若想獲取父pom中所有的dependencyManagement中的構(gòu)件配置,則在子pom中如下配置

<dependencyManagement>
    <dependencies>
        <dependency>
            <artifactId>account-parent</artifactId>
            <groupId>com.juvenxu.accout</groupId>
            <version>3.1.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
     </dependencies>
</dependencyManagement>

配置父pom的一些信息

插件管理

父pom中的插件不想在子類中默認使用

跟依賴管理一樣,被<pluginManagement>包裹的插件配置不會被子pom主動獲取,只有當(dāng)子pom中聲明了該插件的groupId和artifactId后,才會被繼承

一個pom文件既可以是聚合也可以是父pom

反應(yīng)堆

在聚合構(gòu)建時,構(gòu)件模塊的先后順序的排列。

按書寫的先后順序進行構(gòu)建

加料區(qū)

如果同一個項目中存在多個模塊相互依賴時候,version和groupId可以使用${project.groupId}(當(dāng)前模塊的groupId)和${project.verison},這樣就不用不斷的更改了。

<finalName>標(biāo)簽用來確定最終包名

以上です(Ending)

ありがどう(Thank You)

以上就是Maven版本依賴pom文件的詳細內(nèi)容,更多關(guān)于Maven版本依賴pom文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java線程中synchronized和Lock區(qū)別及介紹

    java線程中synchronized和Lock區(qū)別及介紹

    這篇文章主要為大家介紹了java線程中synchronized和Lock區(qū)別及介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • spring security獲取用戶信息的實現(xiàn)代碼

    spring security獲取用戶信息的實現(xiàn)代碼

    這篇文章主要介紹了spring security獲取用戶信息的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java Swing中JDialog實現(xiàn)用戶登陸UI示例

    Java Swing中JDialog實現(xiàn)用戶登陸UI示例

    這篇文章主要介紹了Java Swing中JDialog實現(xiàn)用戶登陸UI功能,結(jié)合完整實例形式分析了Swing使用JDialog實現(xiàn)用戶登陸UI界面窗口功能的步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • Java中ShardingSphere 數(shù)據(jù)分片的實現(xiàn)

    Java中ShardingSphere 數(shù)據(jù)分片的實現(xiàn)

    其實很多人對分庫分表多少都有點恐懼,我們今天用ShardingSphere 給大家演示數(shù)據(jù)分片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 通過實例了解如何在JavaWeb實現(xiàn)文件下載

    通過實例了解如何在JavaWeb實現(xiàn)文件下載

    這篇文章主要介紹了通過實例了解如何在JavaWeb實現(xiàn)文件下載,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • RocketMQ順序消息的原理與特點

    RocketMQ順序消息的原理與特點

    RocketMQ作為一款純java、分布式、隊列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時消息、消息回溯等,本篇我們了解如何實現(xiàn)順序消息的原理與特點
    2023-02-02
  • MyBatis3用log4j在控制臺輸出SQL的方法示例

    MyBatis3用log4j在控制臺輸出SQL的方法示例

    本篇文章主要介紹了MyBatis3用log4j在控制臺輸出SQL的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 淺談多線程_讓程序更高效的運行

    淺談多線程_讓程序更高效的運行

    下面小編就為大家?guī)硪黄獪\談多線程_讓程序更高效的運行。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 一文搞清楚Java中Comparable和Comparator的區(qū)別

    一文搞清楚Java中Comparable和Comparator的區(qū)別

    Java中的Comparable和Comparator都是用于集合排序的接口,但它們有明顯的區(qū)別,文中通過一些實例代碼詳細介紹了Java中Comparable和Comparator的區(qū)別,感興趣的同學(xué)跟著小編一起學(xué)習(xí)吧
    2023-05-05
  • SpringBoot多數(shù)據(jù)源讀寫分離的自定義配置問題及解決方法

    SpringBoot多數(shù)據(jù)源讀寫分離的自定義配置問題及解決方法

    這篇文章主要介紹了SpringBoot多數(shù)據(jù)源讀寫分離的自定義配置,我們可以通過自定義配置數(shù)據(jù)庫配置類來解決這個問題,方式有很多,不同的業(yè)務(wù)采用的方式也不同,下面我簡單的介紹我們項目的使用的方法
    2022-06-06

最新評論

牙克石市| 房产| 镇原县| 称多县| 连江县| 五大连池市| 普兰店市| 内乡县| 英德市| 蒙自县| 达孜县| 璧山县| 新密市| 贵州省| 陆丰市| 鹤壁市| 布拖县| 新余市| 南华县| 德江县| 瑞丽市| 淮北市| 麻栗坡县| 千阳县| 孝感市| 万全县| 龙泉市| 凉城县| 上思县| 淳化县| 湘潭县| 芦山县| 中宁县| 大洼县| 宜兰县| 南充市| 仲巴县| 白河县| 上杭县| 泗洪县| 平山县|