web-dev-qa-db-fra.com

Gradle: Quelle est la différence entre les dépendances classpath et compile?

Lors de l'ajout de dépendances à mon projet, je ne suis jamais sûr du préfixe que je devrais leur donner, par exemple. "classpath" ou "compile".

Par exemple, mes dépendances ci-dessous doivent-elles être compile time ou classpath?

De plus, cela devrait-il être dans mes applications build.gradle ou dans le module spécifique build.gradle?

build.gradle actuel (au niveau de l'application):

apply plugin: 'Java'

repositories {
    mavenCentral()
}

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

Je suppose que vous faites référence à compile et classpath dans le dependencies {} bloquer. Si tel est le cas, il s’agit d’une dépendance Configurations .

Une configuration est simplement un ensemble nommé de dépendances.

La configuration compile est créée par le plugin Java. La configuration classpath est généralement visible dans le fichier buildSrc {} bloc où il faut déclarer des dépendances pour le build.gradle, lui-même (pour les plugins, peut-être).

31
Eric Wendelin

Si le script de compilation lui-même nécessite quelque chose à exécuter, utilisez classpath.

Si votre projet nécessite quelque chose à exécuter, utilisez compile.

Le buildscript{} bloc est pour le build.gradle lui-même.

Pour la construction multi-projets, le fichier de construction de niveau supérieur est destiné au projet racine, le fichier de construction spécifique est destiné au sous-projet (module).

Fichier de construction de niveau supérieur dans lequel vous pouvez ajouter des options de configuration communes à tous les sous-projets/modules.

Ne placez pas les dépendances de vos applications dans un fichier de construction de niveau supérieur, elles appartiennent aux fichiers build.gradle de chaque module.

30
q...

Si je comprends bien, vous confondez Project.dependencies bloc de script avec le Project.buildscript.dependencies bloc de script (comme je l’ai fait quand j’ai atteint cette question).

Je vais essayer de répondre à cela avec ce que j'ai trouvé.

Je pense que vous devriez déjà connaître le Project.dependencies bloc de script. Dans ce bloc, nous déclarons les dépendances requises par notre code source. Il existe plusieurs façons de déclarer une dépendance dont nous avons besoin pour le projet. Voir Didacticiel Gradle: Types de dépendances . Je ne mentionnerai que la partie la plus pertinente pour ce problème:

compile 'org.hibernate:hibernate-core:5.0.5.Final' est une déclaration de dépendance de module. La configuration de compilation (qui est maintenant déconseillée par la configuration d’implémentation.) Est simplement un mot clé pour Implementation only dependencies. Ce n'est pas un mot-clé décrivant le type de dépendance dont il s'agit (par type, je suis les trois types définis dans le tutoriel, module, fichier et projet).

Dans Didacticiel Gradle: Organisation de la logique de construction , il est indiqué:

Si votre script de construction doit utiliser des bibliothèques externes, vous pouvez les ajouter au chemin de classe du script dans le script de construction lui-même. Pour ce faire, vous utilisez la méthode buildscript () en transmettant une clôture qui déclare le chemin de classe du script de génération.

C’est la même chose que vous déclarez, par exemple, le chemin de classe de compilation Java. Vous pouvez utiliser l’un des types de dépendance décrits dans Types de dépendances, à l’exception des dépendances de projet.

Après avoir déclaré le chemin de classe du script de construction, vous pouvez utiliser les classes de votre script de construction comme vous le feriez avec toutes les autres classes du chemin de classe.

J'espère que les choses deviennent claires pour vous maintenant.

Avec classpath "com.Android.tools.build:gradle:${Versions.Android_gradle_plugin}" nous définissons classpath méthode avec com.Android.tools.build:gradle:${Versions.Android_gradle_plugin} qui est une dépendance de module utilisée par le script de construction lui-même plutôt que par la source de votre projet.

Par contre, avec compile 'org.hibernate:hibernate-core:5.0.5.Final' nous déclarons une dépendance de module requise pour votre projet avec la compilation configuration .

tl; dr: Les classpath, compile et implementation sont tous des mots-clés qui peuvent être utilisés contre des dépendances dans différentes circonstances. Le premier est utilisé lorsque vous voulez transmettre une dépendance au script de construction, et le dernier est l’un des configuration que vous voudrez peut-être déclarer.

8
Teng-pao Yu