1 回答

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
問題不在于您的編譯依賴項(xiàng)依賴于提供的依賴項(xiàng),而是提供的依賴項(xiàng)在運(yùn)行時(shí)不存在。我只能猜測為什么會(huì)這樣,但一個(gè)可能的解釋是它已經(jīng)丟失了,只是之前沒有人在運(yùn)行時(shí)實(shí)際使用過該依賴項(xiàng),所以這無關(guān)緊要。
本質(zhì)上,通過建立依賴關(guān)系:
compile,你是說“我需要這個(gè)來編譯我的代碼,我在運(yùn)行時(shí)也需要它”
提供,你說“我需要這個(gè)來編譯我的代碼,但在運(yùn)行時(shí)其他人會(huì)提供它”
運(yùn)行時(shí),你說“我不需要它來編譯我的代碼,但在運(yùn)行時(shí)需要它”
compile是默認(rèn)和最常見的作用域,因?yàn)榇蠖鄶?shù)依賴項(xiàng)在編譯時(shí)和運(yùn)行時(shí)都需要,所以告訴 Maven 在這兩種情況下傳播它們是有意義的。
提供的是其他人將在運(yùn)行時(shí)提供庫的情況(例如,servlet 容器通常將servlet-api.jar
作為基礎(chǔ)結(jié)構(gòu)的一部分提供)。然而,當(dāng)您需要針對(duì)某個(gè)庫進(jìn)行編譯時(shí),此范圍有時(shí)也(ab)用于奇怪的情況,但實(shí)際上將/可能不會(huì)在運(yùn)行時(shí)使用它(例如可選功能)。對(duì)于您的情況,同樣重要的是,如果依賴項(xiàng)實(shí)際上并未在運(yùn)行時(shí)提供并且嘗試在運(yùn)行時(shí)使用它,則應(yīng)用程序只會(huì)在提供的依賴項(xiàng)上失敗。
當(dāng)有 API 工件和實(shí)現(xiàn)工件時(shí),運(yùn)行時(shí)是非常常見的范圍,例如slf4j-api
和slf4j-log4j
- 然后您只需要在編譯時(shí)使用 API,但在運(yùn)行時(shí)需要 API 和實(shí)際實(shí)現(xiàn)。
添加回答
舉報(bào)