在pom.xml中,我們將提供編譯時和運行時作爲依賴中的作用域?那有什麼意義呢?請提供一些適用於理解的例子。maven編譯時和運行時之間的區別
回答
想象一下,您正在將應用程序部署到Java EE compiant服務器。服務器提供實現Java EE標準的所有Lilbraries,所以您不需要將它們部署到您的應用程序中。
在開發過程中,您將需要Java EE庫與編譯時間範圍,因爲你需要編譯的類。
但是,在運行時期間,依賴關係由應用程序服務器提供。 Maven使用'提供'範圍來處理這種情況。
採取編譯
這是默認範圍,如果沒有指定使用。編譯依賴關係在項目的所有類路徑中都可用。而且,這些依賴關係會傳播到依賴項目。
運行
此範圍表明依賴不需要編譯,而是執行。它在運行時和測試類路徑中,但不在編譯類路徑中。
因此,舉例來說,如果我們有以下兩個依賴於我們的POM:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>1.1.3</version>
<scope>compile</scope> <!-- can be ommitted as it is the default -->
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
<scope>runtime</scope>
</dependency>
然後從commons-logging-api
類將是對我的模塊的編譯過程中的類路徑,而從commons-logging
類不會可用 - 如果意外,我在我的項目類中有一個直接引用commons-logging
中的類,那麼構建會失敗。
但是,在執行運行時或測試編譯&時,來自commons-logging的類將位於classpath中,因此可以使用(即通過commons-logging-api
中的類或直接在項目的測試中使用)。
compile
和runtime
這兩個依賴項都包含在Maven中,當您的項目被引用爲另一個項目中的依賴項時,它們是可傳遞地(在同一範圍內)包含的。
p.s.正如kostja提到這裏也是provided
範圍
提供
這很像編譯,而是指你所期望的JDK或容器,以提供在運行時的依賴。例如,在爲Java Enterprise Edition構建Web應用程序時,您可以將Servlet API和相關Java EE API的依賴性設置爲範圍,因爲Web容器提供了這些類。此範圍僅在編譯和測試類路徑中可用,且不是傳遞性的。
基本上provided
和compile
之間的區別是,provided
依賴關係是不傳遞的。
- 1. Grails BuildConfig.groovy,構建,編譯和運行時之間的區別?
- 2. 運行時間和編譯時間確定的區別
- 3. 「編譯時間」和「運行時間」有什麼區別?
- 4. 編譯時間,加載時間和執行時間之間的區別?
- 5. 長時間運行和非事務編排之間的區別
- 6. 編譯時間和運行時間之間的差異
- 7. SQL Server中編譯錯誤和運行時錯誤之間的區別?
- 8. 最終變量和編譯時間常量之間的區別
- 9. perl編譯時間和運行時間
- 10. 編譯時間和運行時間?
- 11. Maven範圍編譯和提供JAR包裝之間的區別
- 12. 設計時和運行時框架之間的區別
- 13. java中的編譯時間庫和運行時庫有什麼區別?
- 14. 編譯時間和運行時錯誤
- 15. 正常運行時間和uptime_since_flush_status之間的區別是什麼
- 16. 類型和新類型之間的編譯時間和運行時間差
- 17. 編譯時間vs運行時間
- 18. 運行時間編譯VS時間(.NET)
- 19. 運行時錯誤和編譯器錯誤有什麼區別?
- 20. 運行時網頁和RESTful Web服務之間的區別?
- 21. 運行時和調試之間的區別
- 22. 編譯和運行時間類
- 23. SBT編譯與compileIncremental之間的區別
- 24. Maven中`warSourceExcludes`和`packagingExcludes`之間的區別
- 25. 查找PHP運行時間之間的區別
- 26. 編譯時間和運行時間的含義
- 27. 編譯和運行時
- 28. 爲運行時識別編譯時間字符串分配
- 29. EclipseLink和Hibernate之間長時間運行會話(Vaadin 7和JPAContainer)的區別
- 30. 時鐘()和MPI_Wtime之間的區別()
一種是隻在編譯期間需要庫時,一種是在運行時需要庫時需要庫。 –