Was ist provided
Scope?
Angenommen, ein jar
Ihren Code zu kompilieren benötigt wird, aber das Glas ist in der Produktionsumgebung Bibliothek Sammlung vorhanden. Dann müssen Sie das Glas nicht mit Ihren Projektarchiven verpacken. Um diese Anforderung zu unterstützen, verfügt Maven über einen Bereich mit der Bezeichnung provided
. Wenn Sie eine JAR-Abhängigkeit als provided
deklarieren, ist dieses JAR zwar während der Kompilierung in Ihrem Klassenpfad vorhanden, wird jedoch nicht in Ihr Projektarchiv gepackt.
provided
Scope ist sehr nützlich, insbesondere in Web-Anwendungen. Zum Beispiel wird servlet-api.jar
benötigt, um in Ihrem Klassenpfad vorhanden zu sein, um Ihr Projekt zu kompilieren, aber Sie brauchen dies nicht, um servlet-api.jar
Datei mit Ihrem war
zu packen. Mit provided
scope kann man diese Anforderung erfüllen.
In Gradle java
ist kein Plug-in mit dem Namen provided
definiert. Auch nicht in war
oder android
Plugins. Wenn Sie den Bereich provided
in Ihrem Projekt verwenden möchten, müssen Sie ihn in Ihrer Datei build.gradle
definieren. Im Folgenden finden Sie den Code-Schnipsel provided
Umfang in gradle zu erklären:
configurations {
provided
}
sourceSets {
main { compileClasspath += configurations.provided }
}
nun Ihre zweite Frage:
Was ist der Unterschied zwischen zur Verfügung gestellt und Laufzeitabhängigkeit Umfang in Gradle?
Um diese Frage zuerst zu beantworten, werde ich compile
Abhängigkeit definieren. compile
Abhängigkeiten sind Abhängigkeiten, diese sind notwendig, um Ihren Code zu kompilieren. Stellen Sie sich nun vor, dass, wenn Ihr Code eine Bibliothek mit dem Namen X
verwendet, Sie X
als Ihre Kompilierzeitabhängigkeit deklarieren müssen. Stellen Sie sich auch vor, dass X
intern eine andere Bibliothek Y
verwendet und Sie Y
als Ihre Laufzeitabhängigkeit deklarierten.
Während der Kompilierung fügt Gradle X
in Ihren Klassenpfad ein, fügt jedoch nicht Y
hinzu. Seit, Y
ist nicht für die Kompilierung erforderlich. Aber es wird sowohl X
als auch Y
in Ihr Projektarchiv packen, da sowohl X
als auch Y
notwendig sind, um Ihr Projektarchiv in der Produktionsumgebung auszuführen. Im Allgemeinen werden alle Abhängigkeiten, die in der Produktionsumgebung benötigt werden, als runtime
-Abhängigkeit bezeichnet.
In Gradle offiziellen documentation, heißt es, dass runtime
Abhängigkeit sind „die durch die Produktion Klassen zur Laufzeit erforderlichen Abhängigkeiten. Standardmäßig auch die Kompilierung Abhängigkeiten enthält.“.
Nun, wenn Sie bis hierher gelesen haben, dann wissen Sie bereits, dass provided
ist eine compile
Abhängigkeit, die wir nicht wollen, in der runtime
Abhängigkeit (im Grunde sein, wir wollen es nicht mit der verpacken Projektarchiv).
Nachfolgend finden Sie eine Darstellung von provided
und runtime
Scope. Hier bezieht sich compile
auf die Abhängigkeiten, die zum Kompilieren des Projekts benötigt werden und non-compile
verweist auf die Abhängigkeiten, die für die Projektkompilierung nicht benötigt werden.
Haben Sie eine Konfiguration 'provided' genannt haben? – Opal
Ich glaube, ich verstehe nicht, welche Art von Konfiguration du meinst. –
Ich meine einen Eintrag, der in 'configurations' Block' bereitgestellt 'heißt. Könnten Sie bitte das gesamte "build.gradle" -Skript einfügen? – Opal