簡體   English   中英

Gradle:類路徑和編譯依賴有什么區別?

[英]Gradle: What is the difference between classpath and compile dependencies?

向我的項目添加依賴項時,我永遠不確定應該給它們什么前綴,例如"classpath""compile".

例如,我下面的依賴項應該是編譯時還是類路徑?

另外,這應該在我的應用程序build.gradle 中還是在模塊特定的 build.gradle 中?

當前 build.gradle(在應用程序級別):

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.hibernate:hibernate-core:5.0.5.Final'
    compile 'mysql:mysql-connector-java:5.1.38'
} 

我猜你在dependencies {}塊中引用了compileclasspath 如果是這樣,那些是依賴配置

配置只是一組命名的依賴項。

compile配置由Java插件創建。 classpath配置常見於buildSrc {}塊,其中需要聲明build.gradle本身的依賴關系(可能是插件)。

如果buildscript本身需要運行某些東西,請使用classpath

如果您的項目需要運行某些東西,請使用compile

buildscript{}塊用於build.gradle本身。

對於多項目構建,頂級構建文件用於根項目,特定構建文件用於子項目(模塊)。

頂級構建文件,您可以在其中添加所有子項目/模塊通用的配置選項。

不要將應用程序依賴項放在頂級構建文件中,它們屬於單個模塊build.gradle文件

如果我理解正確,你Project.dependencies腳本塊與Project.buildscript.dependencies腳本塊混淆(就像我在達到這個問題時所做的那樣)。

我會試着用我發現的東西回答這個問題。

我認為您應該已經熟悉Project.dependencies腳本塊。 在這個塊中,我們聲明了源代碼所需的依賴項。 有幾種方法可以聲明項目所需的依賴項。 請參閱Gradle教程:依賴類型 我只會提到與此問題最相關的部分:

compile 'org.hibernate:hibernate-core:5.0.5.Final'是一個模塊依賴聲明。 編譯配置(現在已被實現配置棄用。)僅僅是“僅Implementation only dependencies.的關鍵字Implementation only dependencies. 它不是一個描述它依賴於哪種類型的關鍵字(在這里按類型我遵循教程中定義的三種類型,即模塊,文件和項目。)

Gradle教程:組織構建邏輯中,它說:

如果構建腳本需要使用外部庫,則可以將它們添加到構建腳本本身的腳本類路徑中。 您可以使用buildscript()方法執行此操作,並傳入一個聲明構建腳本類路徑的閉包。

這與您聲明的方式相同,例如,Java編譯類路徑。 您可以使用依賴項類型中描述的任何依賴項類型,但項目依賴項除外。

聲明構建腳本類路徑后,您可以像構建路徑中的任何其他類一樣使用構建腳本中的類。

我希望現在事情變得清晰了。

使用classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}"我們正在使用com.android.tools.build:gradle:${Versions.android_gradle_plugin}設置classpath方法,這是一個模塊依賴項,即由構建腳本本身使用而不是項目中的源。

另一方面,使用compile 'org.hibernate:hibernate-core:5.0.5.Final'我們使用編譯配置聲明了項目所需的模塊依賴性。

tl; dr: classpathcompileimplementation都是可以在不同情況下用於依賴的關鍵字。 如果要將依賴項傳遞給構建腳本,則使用前者,后者是您可能要聲明的配置之一。

安卓:

項目 build.gradle 中的 classpath —— classpath 之后的實現僅供 gradle 自己使用,在構建腳本中使用。 因此,如果我在項目 build.gradle 類路徑 'retrofit...' 中添加實現(例如改造),我將無法在我的代碼中進行改造!! 因為——我的代碼看不到,只有buildscript能看到。

在 app build.gradle 中實現——添加你的代碼可以使用的實現!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM