Hallo Sven,
Klassen wie java.io.File sind Bestandteil des Java SDK (und der JRE Laufzeitumgebung), diese befinden sich daher schon im classpath und können einfach via import Statement eingebunden werden. Welche Klassen zur Verfügung stehen, sieht man in der Api-Dokumentation, z.B. hier: https://docs.oracle.com/javase/8/docs/api/
Wie Du schon selbst bemerkt hast, gibt es mehrere Möglichkeiten, externe Funktionalität einzubinden:
-
teilweise Code, z.B. eine Methode oder eine ganze Klasse als Source-Code kopieren und in dem Projekt kompilieren
- Vorteil:
- platzsparend
- Nachteil:
- falls man die Funktionalität öfters benötigt, hat man duplizierten Code an mehreren Stellen bzw. über mehrere Projekte verteilt, z.T. in mehreren Versionen herumliegen, das wird schnell unübersichtlich
- geht der einzubindende Umfang über ein paar Funktionen/Klassen hinaus, wie z.B. bei Verwendung von Web-Frameworks, macht es keinen Sinn, die Sourcen selbst kompilieren zu wollen, da der Aufwand im Vergleich zum Einbinden der jars viel höher ist, durch transitive Abhängigkeiten steigt die Anzahl der externen jars in durschnittlichen Projekten schnell mal auf 50 bis 100
- Vorteil:
-
externe Bibliotheken einbinden
- Vorteil:
- kein duplizierter Code vorhanden
- man hat eine Übersicht der verwendeten Versionen, die meisten Bibliotheken haben eine Versionsnummer im Namen
- Einbinden von großen Fertiglösungen/Frameworks ohne großen Aufwand möglich
- Nachteil:
- nimmt mehr Platz in Anspruch, gerade wenn mehrere Bibliotheken/jars ins Projekt eingebunden werden, siehe oben, kann die Projekt-Größe auf mehrere MB ansteigen
- es wird oft eine Bibliothek eingebunden, obwohl man manchmal daraus nur eine Funktion benötigt
- Vorteil:
-
Einbinden von jars:
- früher hat man einzelne jars aus dem Netz geladen, lokal in einem Ordner abgelegt und dann in der IDE in den classpath eingebunden
- seit einigen Jahren haben sich Dependency-Management-Systeme etabliert, diese erlauben im Projekt das Konfigurieren der gewünschten Abhängigkeiten, die IDE unterstützt i.d.R. das Herunterladen aus öffentlichen Repositories (z.B. maven central, mvnrepository) und das Einbinden der Abhängigkeiten in den classpath
-
notwendige Tools:
- maven
- gradle (mit ivy oder maven-Repository Anbindung)
- früher ant/ivy
-
allgemein wird in den meisten Projekten heutzutage verwendet:
- Versions-Verwaltungssystem für den Source-Code (z.B. git, subversion)
- Dependency-Management für die Verwendung externer binaries (maven gradle)
- eigene binary repositories für die Bereitstellung der eigenen jars/Artifakte und als Proxy für öffentliche Repositories (artifactory, nexus)
- Build-Server für continuous integration (jenkins, teamcity)
- Server für Überprüfung der code qualität (sonarqube)
- Deployment-/Installations-Tools (docker, ansible)
Ich hoffe, Dir einen guten Überblick gegeben zu haben. Das ging jetzt schon etwas über die eigentliche Frage hinaus, aber aufgrund der Richtung Deiner Fragestellung dauert es oft nicht lange, bis die anderen aufgeführten Punkte auch in den Fokus rücken :-).
Viele Grüße Roland
Punkte: 30
Vielen, vielen Dank für deine ausführliche Antwort, wäre wirklich nicht notwendig gewesen - danke :)
─ sven03 06.05.2021 um 15:26