/ / Gradle: Qual è la differenza tra classpath e dipendenze di compilazione? - java, gradle, dipendenze

Gradle: qual è la differenza tra classpath e dipendenze di compilazione? - java, gradle, dipendenze

Quando aggiungo dipendenze al mio progetto non sono mai sicuro di quale prefisso dovrei dargli, ad es. "classpath" o "compile".

Ad esempio, le mie dipendenze dovrebbero essere sotto il tempo di compilazione o il percorso di classe?

Inoltre, dovrebbe essere nel mio applicazioni build.gradle o nel modulo build.gradle specifico?

Build.gradle corrente (a livello dell'applicazione):

apply plugin: "java"

repositories {
mavenCentral()
}

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

risposte:

14 per risposta № 1

Ho intenzione di indovinare che stai facendo riferimento compile e classpath all'interno del dependencies {} bloccare. Se è così, quelli sono dipendenza configurazioni.

Una configurazione è semplicemente un insieme di dipendenze con nome.

Il compile la configurazione è creata dal plugin Java. Il classpath la configurazione è comunemente vista nel buildSrc {} blocco dove è necessario dichiarare le dipendenze per build.gradle, stesso (per i plugin, forse).


15 per risposta № 2

buildscript ha bisogno di qualcosa da eseguire, usare classpath

il tuo progetto ha bisogno di qualcosa da eseguire, usare compilare

Il blocco buildscript {} è per build.gradle stesso

per la creazione di più progetti, il file di build di livello superiore è per il progetto root, il file di build specifico è per il sottoprogetto (modulo)

File di build di livello superiore in cui è possibile aggiungere opzioni di configurazione comuni a tutti i sottoprogetti / moduli.

Non collocare le dipendenze dell'applicazione nel file di build di livello superiore, esse appartengono ai singoli file build.gradle del modulo


1 per risposta № 3

Se capisco correttamente, stai confondendo Project.dependencies blocco di script con il Project.buildscript.dependencies blocco di script (proprio come ho fatto quando ho raggiunto questa domanda).

Cercherò di rispondere a ciò che ho trovato.

Penso che dovresti già avere familiarità con il Project.dependencies blocco di script. In questo blocco, dichiariamo le dipendenze richieste dal nostro codice sorgente. Esistono diversi modi per dichiarare una dipendenza di cui abbiamo bisogno per il progetto. Vedere Esercitazione di gradle: tipi di dipendenza. Citerò solo la parte più pertinente a questo problema:

compile "org.hibernate:hibernate-core:5.0.5.Final" è una dichiarazione di dipendenza del modulo. La configurazione di compilazione (che ora è deprecata dalla configurazione di implementazione) è semplicemente una parola chiave per Implementation only dependencies. Non è una parola chiave che descrive quale tipo di dipendenza è (per tipo qui sto seguendo i tre tipi definiti nel tutorial, cioè il file del modulo e il progetto).

In Gradle Tutorial: organizzazione della logica di costruzione dice:

Se il tuo script di compilazione deve usare esternolibrerie, puoi aggiungerle al classpath dello script nello script di compilazione stesso. Tu lo fai usando il metodo buildscript (), passando una chiusura che dichiara il classpath dello script di build.

Questo è lo stesso modo in cui si dichiara, ad esempio, la compilazione Java classpath. È possibile utilizzare uno qualsiasi dei tipi di dipendenza descritti in Tipi di dipendenza, ad eccezione delle dipendenze del progetto.

Dopo aver dichiarato il classpath dello script di compilazione, è possibile utilizzare le classi in il tuo script di compilazione come faresti con qualsiasi altra classe sul classpath.

Spero che le cose ti stiano chiarendo ora. Con classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}" stiamo impostando classpath configurazione con com.android.tools.build:gradle:${Versions.android_gradle_plugin} che è una dipendenza del modulo che viene utilizzata dallo stesso script di compilazione piuttosto che dall'origine nel progetto.