1 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
正如Maven 文檔規(guī)定的范圍所提供的:
這很像 compile,但表明您希望 JDK 或容器在運(yùn)行時(shí)提供依賴項(xiàng)。例如,在為 Java Enterprise Edition 構(gòu)建 Web 應(yīng)用程序時(shí),您可以將對(duì) Servlet API 和相關(guān) Java EE API 的依賴項(xiàng)設(shè)置為提供的范圍,因?yàn)?Web 容器提供這些類。此范圍僅在編譯和測(cè)試類路徑上可用,并且不可傳遞。
那里已經(jīng)提到了一個(gè)用例:在構(gòu)建稍后要部署在 JavaEE 應(yīng)用程序服務(wù)器上的 JavaEE 應(yīng)用程序時(shí),應(yīng)用程序服務(wù)器提供了 javaEE 實(shí)現(xiàn)。
因此,要告訴 Maven 您在編譯時(shí)需要此依賴項(xiàng)但稍后未打包到項(xiàng)目中,您將使用提供的范圍,例如:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
另一個(gè)用例是構(gòu)建使用不同容器類型的 JavaEE 應(yīng)用程序。有一個(gè)JavaEE EJB 和一個(gè) Web 容器,您需要確保您的類不會(huì)被打包/加載到錯(cuò)誤的容器中,甚至不會(huì)被加載到兩個(gè)容器中,因?yàn)檫@可能會(huì)給您的應(yīng)用程序和類加載器帶來各種問題。
假設(shè)您正在構(gòu)建一個(gè)包含 EJB 模塊和 Web 模塊的應(yīng)用程序,并且您希望 EJB 在 EJB 容器中運(yùn)行。您還希望在 web 模塊中使用您的 EJB。由于 EJB 在 EJB 容器中運(yùn)行,而 Web 模塊在 web 容器中運(yùn)行,因此您不能簡(jiǎn)單地在您的 Web 項(xiàng)目中添加具有作用域 compile 的 EJB-Dependency。因?yàn)槿绻氵@樣做,maven 會(huì)將 ejb 打包到 war 文件中,而 EJB 最終會(huì)出現(xiàn)在 web 容器中。
因此,在您的 Web 應(yīng)用程序中,您可以將依賴項(xiàng)添加為
<artifactId>my-web</artifactId>
<packaging>war</packaging>
<dependency>
<groupId>your.group</groupId>
<artifactId>my-ejb</artifactId>
<type>ejb</type>
<scope>provided</scope>
</dependency>
這樣你就告訴 maven 你想使用你的 EJB 模塊,但它不應(yīng)該把它打包到你的 war 文件中,你將確保這個(gè)模塊在運(yùn)行時(shí)自己可用。
添加回答
舉報(bào)