1 回答

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