Unterschied zwischen Kompilierungs- und Laufzeitkonfigurationen in Gradle

102

Meine Frage ist ein bisschen häufig, aber sie hängt auch mit Gradle zusammen.

Warum brauchen wir Kompilierungs- und Laufzeitkonfiguration?

Wenn ich etwas kompiliere, benötige ich Artefakte, um meine Java-Klassen in Bytecode zu konvertieren, sodass ich eine Kompilierungskonfiguration benötige. Warum ist jedoch eine Laufzeitkonfiguration erforderlich? Benötige ich etwas anderes, um meine Anwendung in JVM auszuführen?

Entschuldigung, wenn es dumm klingt, aber ich verstehe nicht.

Xelian
quelle

Antworten:

148

Im häufigsten Fall sind die zur Kompilierungszeit benötigten Artefakte eine Teilmenge der zur Laufzeit benötigten Artefakte. Angenommen, ein Programm namens applibrary verwendet die Bibliothek foo, und die Bibliothek verwendet foo intern die Bibliothek bar. Dann wird nur foozum Kompilieren benötigt app, aber beide foound barzum Ausführen. Aus diesem Grund ist standardmäßig alles, was Sie in die Gradle- compileKonfiguration einfügen, auch in der Konfiguration sichtbar runtime, aber das Gegenteil ist nicht der Fall.

Peter Niederwieser
quelle
20
Schade, dass dies in gradle.org/docs/current/userguide/dependency_management.html nicht explizit erwähnt wird . Sie verwenden sowohl Kompilierung als auch Laufzeit, ohne explizit ihre Bedeutung
anzugeben
2
@silasdavis In der Dokumentation wird der Unterschied erläutert: gradle.org/docs/current/userguide/… in 8.3. Abhängigkeitskonfigurationen
Angelcervera
@angelcervera Ah, das tut es auch, 8. Grundlagen des Abhängigkeitsmanagements und 51. Abhängigkeitsmanagement. Ich kann sehen, warum sie zwei Abschnitte haben, aber vielleicht wäre es schön, wenn der letztere auf den ersteren verweisen würde. Ich glaube, ich bin auf 51 gelandet und habe erwartet, dass es einen vollständigen Bericht gibt.
Silasdavis
@ Silasdavis True. Gleiches gilt für andere Abschnitte in der Dokumentation. Ich muss mir die gleiche Zeit nehmen, um alle Unterlagen von A bis Z zu lesen.
Angelcervera
1
@Peter Niederwieser Wenn die Kompilierungsaufgabe dieselben Abhängigkeiten wie die Laufzeit aufweist, in welchem ​​Szenario würden Sie die Laufzeit anstelle der Kompilierung verwenden?
rj2700