什麼是provided
範圍?
假設編譯代碼需要jar
,但該jar存在於生產環境庫集合中。那麼你不需要將jar包與你的項目檔案打包在一起。爲了支持這個需求,Maven的作用域爲provided
。如果你聲明任何jar依賴項爲provided
,那麼這個jar將在編譯期間出現在你的類路徑中,但不會與你的項目歸檔一起打包。
provided
範圍非常有用,特別是在Web應用程序中。例如,servlet-api.jar
需要存在於您的類路徑中才能編譯您的項目,但您不需要將servlet-api.jar
文件與war
一起打包。用provided
範圍可以達到這個要求。
Gradle java
插件中沒有定義範圍provided
。也不在war
或android
插件中。如果您想在項目中使用provided
範圍,則必須在build.gradle
文件中對其進行定義。以下是代碼片段聲明provided
範圍的gradle中:
configurations {
provided
}
sourceSets {
main { compileClasspath += configurations.provided }
}
現在,你的第二個問題:
是什麼在搖籃提供和運行依賴範圍之間的區別?
要首先回答這個問題,我將定義compile
依賴關係。 compile
依賴關係是依賴項,這些是編譯你的代碼所必需的。現在想象一下,如果你的代碼使用了一個名爲X
的庫,那麼你必須聲明X
作爲你的編譯時間依賴。另外想象一下,X
在內部使用另一個庫Y
,並且您將Y
聲明爲您的運行時依賴項。
在編譯期間,Gradle會將X
添加到您的類路徑中,但不會添加Y
。因爲編譯時不需要Y
。但它會將X
和Y
與您的項目存檔打包在一起,因爲X
和Y
是在生產環境中運行項目存檔所必需的。通常,生產環境中所需的所有依賴關係都稱爲runtime
依賴關係。
在搖籃官方documentation,它說,runtime
依賴是「在運行時由生產類所需的依賴關係。在默認情況下,還包括編譯時的依賴。」。現在
,如果你瞭解了這些內容,那麼你已經知道provided
是compile
依賴,我們不希望出現在runtime
依賴(基本上,我們不希望它一起打包項目檔案)。
以下是provided
和runtime
範圍的說明。這裏,compile
指的是編譯項目所需的依賴關係,non-compile
指的是項目編譯不需要的依賴關係。
你有一個名爲'provided'的配置嗎? – Opal
我想我不明白你的意思是什麼樣的配置。 –
我的意思是在'配置'塊中有一個名爲'provided'的條目。你能否粘貼整個'build.gradle'腳本? – Opal