Java Bibliotheken (Logik) - Installer

Erste Frage Aufrufe: 1029     Aktiv: 06.05.2021 um 15:26

0

Ich hätte eine allgemeine Frage zu den Java Bibliotheken. Mir erschließt sich nicht ganz, weshalb es in manchen Fällen notwendig ist Bibliotheken als Ganzes in das Java Projekt einzubinden (wobei man nerviger Weise den Code kopieren, bzw. die Klasse herunterladen muss), in anderen Fällen, jedoch es reicht, fehlende Klassen zu importieren. Handelt es sich bei den zu importierenden (z.B. import java.io.File), um eine Standardklasse, der Standardbibliothek, und bei z.B. Klassen von Princeton (StdDraw, StdIn, StdOut), um Klassen, die quasi von externen anbietern stammen?

Außerdem bin ich mir nicht ganz sicher, ob es eine Möglichkeit gibt, Java Bibliotheken direkt z.B. in Intellij herunterzuladen, bzw. ob so wie ich es mache (Klasse herunterladen, in package packen), bzw. Code kopieren, der richtige Weg ist.

Vielen Dank schon mal :)

Diese Frage melden
gefragt

Punkte: 14

 
Kommentar schreiben
1 Antwort
1

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
  • 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
  • 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

Diese Antwort melden
geantwortet

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

Kommentar schreiben