2015-06-09 12 views
5

Ich habe build.gradle vor mir und es gibt einige Abhängigkeiten, die als provided deklariert werden, aber in documentation sehe ich diesen Abhängigkeitsbereich nicht.'Bereitgestellte' Abhängigkeit in Gradle

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web:1.2.4.RELEASE") 
    .... 

    provided 'backport-util-concurrent:backport-util-concurrent:3.1' 
    provided 'org.javolution:javolution:[email protected] 
    .... 
} 

Ist dies durch ein Plugin zur Verfügung gestellt? Wenn ja, wie finde ich heraus, zu welchem ​​Plugin es gehört?

Was ist der Unterschied zwischen provided und runtime Abhängigkeitsbereich in Gradle?

+1

Haben Sie eine Konfiguration 'provided' genannt haben? – Opal

+0

Ich glaube, ich verstehe nicht, welche Art von Konfiguration du meinst. –

+0

Ich meine einen Eintrag, der in 'configurations' Block' bereitgestellt 'heißt. Könnten Sie bitte das gesamte "build.gradle" -Skript einfügen? – Opal

Antwort

16

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.

Verwandte Themen