Afhankelijkheidsbeheer in Gradle begrijpen
Opslagplaatsen worden in Gradle gebruikt voor afhankelijkheidsbeheer. Er zijn twee componenten voor Gradle-afhankelijkheden: afhankelijkheden en publicaties van het project.
Wanneer u een project op Gradle bouwt, heeft u waarschijnlijk bibliotheken van andere ontwikkelaars nodig. Stel dat je de Apache Commons Lang-bibliotheek nodig hebt voor speciale tekenreeksmanipulaties. Dus je hebt het nodig in je klassenpad om je code te laten werken. En de Apache Commons Lang heeft mogelijk extra bibliotheken nodig waarvan u niet op de hoogte bent. Met Gradle kun je de specifieke afhankelijkheid vertellen die je project nodig heeft en het zal naar de gespecificeerde repository zoals Maven of Ivy gaan en alle gerelateerde afhankelijkheden uitzoeken en de bestanden downloaden en automatisch voor je instellen.
Gradle heeft ook de mogelijkheid om je artefacten te publiceren. U kunt zelf bepalen wat publicatie voor uw specifieke geval betekent. U kunt het lokaal publiceren of publiceren naar een Maven- of Ivy-repository.
Voorbeeld van Gradle-repository
Stel dat we de StringUtils-klasse uit de Apache Commons Lang-bibliotheek willen gebruiken. Laten we een regisseur als volgt opzetten:
Hallo Wereld|-- bouwen.gradueel
'-- src
|-- hoofd
'-- java
'-- Hallo Wereld
'-- Hallo Wereld.Java
In de hallowereld.java, je kunt de volgende code plaatsen:
import organisatie.apache.commons.lang3.StringUtils;openbare klas helloworld
public static void main(String[] args)
String groeten = "Hallo wereld!";
Systeem.uit.println(groeten);
Systeem.uit.println (StringUtils).swapCase (groeten));
En in de opbouw.gradle-bestand kunt u het volgende plaatsen:
plug-in toepassen: 'java'versie = '1.0'
opslagplaatsen
mavenCentral()
afhankelijkheden
compileergroep: 'org.apache.commons', naam: 'commons-lang3', versie: '3.7'
pot
van configuraties.compileren.verzamel zipTree it
Laten we bespreken wat er gebeurt in het bovenstaande buildscript. Het vertelt Gradle om in de Maven-repository te zoeken naar de commons-lang3-versie 3.7. Het vertelt Gradle ook om de afhankelijkheden in het jar-bestand te verpakken. Als u de uit configuraties verwijdert.compileren.collect zipTree it regel, dan moet u de externe afhankelijkheden opnemen in het klassenpad wanneer u het programma uitvoert.
Nu kunt u vanuit de hoofdmap de build uitvoeren met het commando
$ schaaltjeU zou de volgende resultaten moeten zien:
$ schaaltje
Download https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.7/
commons-lang3-3.7.pom
Download https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/42/
commons-ouder-42.pom
Download https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.7/
commons-lang3-3.7.pot
BOUW SUCCESVOL in 6s
2 bruikbare taken: 1 uitgevoerd, 1 up-to-date
U kunt de build als volgt uitvoeren:
$ java -cp build/libs/helloworld-1.0.pot halloworldHallo Wereld!
Hallo Wereld!
Als u de afhankelijkheden niet in uw build had opgenomen, waren de StringUtils-klassen niet opgenomen in uw helloworld-1.0.jar-bestand. En je zou een fout als deze hebben gekregen:
$ java -cp build/libs/helloworld-1.0.pot helloworldHallo Wereld!
Uitzondering in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/
StringUtils bij helloworld.hoofd (hallowereld).java:11)
Veroorzaakt door: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils
op java.netto-.URLClassLoader.findClass(URLClassLoader.java:381)
op java.lang.ClassLoader.loadClass(ClassLoader).java:424)
bij zon.diversen.Launcher$AppClassLoader.loadClass(Launcher).java:331)
op java.lang.ClassLoader.loadClass(ClassLoader).java: 357)
… 1 meer
Gradle maakt het u gemakkelijk om uw afhankelijkheden in uw pakket te verpakken.
Conclusie
Het gebruik van Gradle-repository's en afhankelijkhedenfunctionaliteiten kan uw afhankelijkheidsbeheerproces vereenvoudigen. Je hoeft niet alles handmatig bij te houden.
Verdere studie:
Gradle Dependency Management voor Java-projecten