Wenn ich meinem Projekt Abhängigkeiten hinzufüge, bin ich mir nie sicher, welches Präfix ich ihnen geben soll, z. B. "classpath"
oder"compile".
Sollten meine folgenden Abhängigkeiten beispielsweise die Kompilierungszeit oder der Klassenpfad sein?
Sollte dies auch in meinen Anwendungen build.gradle oder im modulspezifischen build.gradle sein?
Aktuelles build.gradle (auf Anwendungsebene):
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'org.hibernate:hibernate-core:5.0.5.Final'
compile 'mysql:mysql-connector-java:5.1.38'
}
java
gradle
dependencies
java123999
quelle
quelle
classpath
ist kein gültiger Abhängigkeitsbereich.compileOnly
dieproject.configurations.compileClasspath
project.configurations.compile
Antworten:
Ich werde vermuten, dass Sie sich auf
compile
undclasspath
innerhalb desdependencies {}
Blocks beziehen . Wenn das so ist, sind solche Abhängigkeit Nachdem Konfigurationen .Die
compile
Konfiguration wird vom Java-Plugin erstellt. Dieclasspath
Konfiguration wird häufig in dembuildSrc {}
Block angezeigt, in dem Abhängigkeiten für das build.gradle selbst deklariert werden müssen (möglicherweise für Plugins).quelle
dependencies {}
Block kann sowohl innerhalbbuildscript {}
als auch außerhalb deklariert werden . Im Inneren verwenden Sie dieclasspath
Konfiguration für Abhängigkeiten, die zum Kompilieren des Build-Skripts selbst erforderlich sind.Wenn Buildscript selbst etwas zum Ausführen benötigt, verwenden Sie classpath .
Wenn Ihr Projekt ausgeführt werden muss, verwenden Sie compile .
Der
buildscript{}
Block ist für das build.gradle selbst.Bei der Erstellung mehrerer Projekte ist die Build-Datei der obersten Ebene für das Stammprojekt und die spezifische Build-Datei für das Unterprojekt (Modul) vorgesehen.
Build-Datei der obersten Ebene, in der Sie Konfigurationsoptionen hinzufügen können, die allen Unterprojekten / Modulen gemeinsam sind.
Platzieren Sie Ihre Anwendungsabhängigkeiten nicht in der Build-Datei der obersten Ebene, sie gehören zu den einzelnen Modul-Build.gradle-Dateien
quelle
compile
und kein a verwenden sollteclasspath
?Wenn ich das richtig verstehe, verwechseln Sie den Skriptblock
Project.dependencies
mit demProject.buildscript.dependencies
Skriptblock (genau wie bei der Beantwortung dieser Frage).Ich werde versuchen, dies mit dem zu beantworten, was ich gefunden habe.
Ich denke, Sie sollten bereits mit dem
Project.dependencies
Skriptblock vertraut sein . In diesem Block deklarieren wir Abhängigkeiten, die von unserem Quellcode benötigt werden. Es gibt verschiedene Möglichkeiten, eine Abhängigkeit zu deklarieren, die wir für das Projekt benötigen. Siehe Gradle-Tutorial: Abhängigkeitstypen . Ich werde nur den Teil erwähnen, der für dieses Problem am relevantesten ist:compile 'org.hibernate:hibernate-core:5.0.5.Final'
ist eine Modulabhängigkeitsdeklaration. Die Kompilierungskonfiguration (die jetzt von der Implementierungskonfiguration nicht mehr unterstützt wird) ist lediglich ein Schlüsselwort für.Implementation only dependencies.
Es ist kein Schlüsselwort, das beschreibt, um welche Art von Abhängigkeit es sich handelt (nach Typ folge ich hier den drei im Lernprogramm definierten Typen, dh Modul, Datei und Projekt.)Im Gradle-Tutorial: Organisieren der Build-Logik heißt es:
Ich hoffe, die Dinge werden Ihnen jetzt klar.
Mit setzen
classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}"
wir eineclasspath
Methode, beicom.android.tools.build:gradle:${Versions.android_gradle_plugin}
der es sich um eine Modulabhängigkeit handelt, die vom Build-Skript selbst und nicht von der Quelle in Ihrem Projekt verwendet wird.Auf der anderen Seite, mit
compile 'org.hibernate:hibernate-core:5.0.5.Final'
uns eine Modul Abhängigkeit , die für Ihr Projekt mit der Kompilierung sind erklärt Konfiguration .tl; dr: Die
classpath
,compile
undimplementation
sind alle Schlüsselwörter , die gegen Abhängigkeiten unter verschiedenen Umständen verwendet werden kann. Ersteres wird verwendet, wenn Sie eine Abhängigkeit an das Build-Skript übergeben möchten, und letzteres ist eine der Konfigurationen, die Sie möglicherweise deklarieren möchten.quelle
'org.projectlombok:lombok:1.18.4'
keineclasspath
Zuordnung, da es sich um ein JAR handelt, das nur während der Kompilierungszeit,javac
aber nicht zurjava
Laufzeit benötigt wird. Daher ist die korrekte Verwendung ein Zusammenspiel der definierten Schlüsselwörter und des Artefakts. Das heißt, man braucht a priori Wissen.