maven中scope標籤詳解

前言

最近在做itoo的pom優化工作,發現對於maven依賴管理中的scope標籤還是有不明白的地方,所以今天就來總結一下這方面的知識,scope在maven的依賴管理中主要負責項目的部署

maven的哲學在上次技術分享的時候也提到了:約定大於配置,所以在maven中,很多內容都有默認值,scope的默認值是compile,那麼scope還能有哪些選項呢?

scope的分類

1.compile:默認值 他表示被依賴項目需要參與當前項目的編譯,還有後續的測試,運行週期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去

2.test:依賴項目僅僅參與測試相關的工作,包括測試代碼的編譯和執行,不會被打包,例如:junit

3.runtime:表示被依賴項目無需參與項目的編譯,不過後期的測試和運行週期需要其參與。與compile相比,跳過了編譯而已。例如JDBC驅動,適用運行和測試階段

4.provided:打包的時候可以不用包進去,別的設施會提供。事實上該依賴理論上可以參與編譯,測試,運行等週期。相當於compile,但是打包階段做了exclude操作

5.system:從參與度來說,和provided相同,不過被依賴項不會從maven倉庫下載,而是從本地文件系統拿。需要添加systemPath的屬性來定義路徑

scope的依賴傳遞

A依賴B,B依賴C。當前項目爲A,只當B在A項目中的scope,那麼c在A中的scope是如何得知呢?

當C是test或者provided時,C直接被丟棄,A不依賴C;(排除傳遞依賴)

否則A依賴C,C的scope繼承與B的scope

ITOO實例

在優化過程中,我們把core和web中的一部分依賴,加上了scope標籤,也就是說,避免了最後打包階段把一些可以從ear中已經提供的包排除在外,去掉重複的打包過程

core的pom文件

<dependencies>
        <dependency>
            <groupId>com.dynamic</groupId>
            <artifactId>itoo-base</artifactId>
            <type>ejb</type>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.dynamic</groupId>
            <artifactId>itoo-cloud-api</artifactId>
            <scope>provided</scope>
            <type>ejb</type>
        </dependency>

        <dependency>
            <groupId>com.dynamic</groupId>
            <artifactId>itoo-tool</artifactId>
            <scope>provided</scope>
            <type>ejb</type>
        </dependency>


        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
        </dependency>

        <dependency>
                <groupId>com.dynamic</groupId>
                <artifactId>itoo-authority-api</artifactId>
                <scope>provided</scope>
                <type>ejb</type>

        </dependency>

        <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
        </dependency>

        <dependency>
                <groupId>com.dynamic</groupId>
                <artifactId>itoo-basic-api</artifactId>
                <scope>provided</scope>
                <type>ejb</type>
        </dependency>
    </dependencies>

https://blog.csdn.net/cd18333612683/article/details/66478332
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章