Abhängigkeiten

Status
Nicht offen für weitere Antworten.

maxxi

Bekanntes Mitglied
hello! :meld:

Mal wieder eine Anfängerfrage.

Ich versuche hinter das Rätsel von Abhängigkeiten und deren Auflösung zu kommen. In C++ soll es angeblich "make" geben, um aus C++-Quellcode ein ausführbares Programm erstellen zu können. In Java macht man das mit "javac".

Angeblich soll es aber möglich sein, dass zwischen unterschiedlichen Java-Projektteilen(deren Teile man sich vielleicht von unterschiedlichsten Quellen zusammensucht) gewisse Abhängigkeiten bestehen. Und aus diesem Grund wurde angeblich ANT erfunden. Dieses ANT soll sich um diese Abhängigkeiten kümmern und "auflösen".

Leider verstehe ich nicht, was diese "Abhängigkeiten" sind. ???:L Und was wird da wie "aufgelöst"?
Könnte mir wer ein Beispiel dazu geben?

Ich habe schon 3 JAva-Bücher durchgeblättert, aber die einzige Info, die ich gefunden habe, ist, dass ANT ein Open-source-Projekt ist, dass sich eben um diese erwähnten Sachen kümmert. Sonst habe ich nichts gefunden. Auf der wikipedia-Seite werden diese "Abhängigkeiten" auch nicht erklärt. Da gibts zwar ein Beispiel mit 2 Targets, aber ich finde da nichts, was da irgendwie "Abhängigkeiten" sein könnten. Link: Apache Ant ? Wikipedia

Kann mir wer weiterhelfen?
 
Zuletzt bearbeitet:
M

maki

Gast
Alles falsch... aber nur ein bisschen ;)

In C++ soll es angeblich "make" geben, um aus C++-Quellcode ein ausführbares Programm erstellen zu können. In Java macht man das mit "javac".
Nein, javac ist der Kompiler, das Java Gegenstück zu make ist Ant.

Angeblich soll es aber möglich sein, dass zwischen unterschiedlichen Java-Projektteilen(deren Teile man sich vielleicht von unterschiedlichsten Quellen zusammensucht) gewisse Abhängigkeiten bestehen. Und aus diesem Grund wurde angeblich ANT erfunden. Dieses ANT soll sich um diese Abhängigkeiten kümmern und "auflösen".
Nein, siehe oben.
Dafür gibt es Maven2, mittlerweile gibt es eine Erweiterung für Ant, Ivy, die das auch kann.

Leider verstehe ich nicht, was diese "Abhängigkeiten" sind. Und was wird da wie "aufgelöst"?
In jedem Projekt (ausser HelloWorld) wirst du andere Libs/Frameworks/APIs brauchen, in Form von jars.
Das sind die Abhängigkeiten ;)
Beispiel: log4j - Ein sehr verbreitetes Loggingframework, um das zu nutzen brauchst du die jar, welche dieses Framework enthält.
Im Falle von Maven2 (und auch Ivy) gibt du an, welche Version du brauchst, und Maven2 (oder auch Ivy) lädt dir dann die jar aus dem sog. "Artifact Repository".
 

ice-breaker

Top Contributor
Neija es erfüllt eine andere Aufgabe, so wie das make aus C++ (aus deiner Aussage) kümmert es sich eben nur um das Builden, also alle Dateien die da liegen zusammenpacken und zu einer ausführbaren Datei machen (Jar), es kann aber eben auch noch andere Dinge wie UnitTests ausführen, Dokumentation erzeugen usw.

Aber eben nicht das autom. Abhängigkeitenmanagement wie bei Maven.
 
M

maki

Gast
Naja, Ant ist zwar nicht mehr der letzte Schrei, aber als veraltet und nicht mehr anzuwenden würde ich es nicht bezeichnen.

Würde dir empfehlen dich in Ant einzulesen/einzuarbeiten, so als einstieg zu Buildtools, Maven2/Gant/etc. pp. kannst du dann später noch lernen, hat aber eine höhere Lernkurve als Ant.

Wichtig ist erstmal dass du vestehst wozu man einen autom. Build braucht und dass du weisst warum es gut & wichtig ist, in der Lage zu sein dein Projekt mit einer einzigen Zeile zu bauen.
 

maxxi

Bekanntes Mitglied
OK! Ich werde mir mal notieren, dass es dieses Ivy und Maven2 gibt.

Aber nochmals zurück zu diesen "Abhängigkeiten".

Angenommen ich mache ein Programm, das a.jar verwendet.
In diesem a.jar werden Klassen von einem b.jar eingesetzt. Wenn ich a.jar aus dem Internet hole, beinhaltet es dieses b.jar aber noch nicht. D. h. dieses b.jar fehlt mir noch. Das versteht man unter "Abhängigkeiten"? Dass in diesem Fall das a.jar nur funktioniert, wenn auch das b.jar vorhanden ist?

Und um das zu erkennen brauche ich z. B. Ivy? Ich hätte geglaubt, dazu brauch ich noch nichteinmal ANT. Ich dachte, das würde ich schon beim Kompilieren, oder spätestens dann, wenn ich das Programm starte, erkennen.
 

ice-breaker

Top Contributor
Nein, das erkennst an [c]ClassNotFoundException[/c]s die dann kommen bzw. Kompilierungsfehlern *g*

Auf gut deutsch die Abhängigkeiten von Maven müssen auch manuell eingestellt werden und können nicht automatisch erkannt werden.
Denn wenn der Code die Abhängigkeit
Code:
org.junit.Assert.*
hat, weiß Maven ja auch noch nicht wo es die Klassen herholen soll.
 

maxxi

Bekanntes Mitglied
Ok. Also ANT habe ich wahrscheinlich schon verstanden. Damit kann ich nur einfache Kommandos definieren, die der Reihe nach ausgeführt werden. Irgendwelche "Abhängigkeiten" können in ANT weder definiert noch kontrolliert werden.

Eine "Abhängigkeit" tritt auf, wenn mir z. B. eine Klasse fehlt. Dann meldet mir das Java in Form einer Exception. Wenn mir das Java sowieso meldet, wozu brauche ich dann noch Ivy? Dann reicht doch ANT, oder?

EDIT:
Auf gut deutsch die Abhängigkeiten von Maven müssen auch manuell eingestellt werden und können nicht automatisch erkannt werden.
Ok, dann kann ich in Maven diese Abhängigkeiten noch extra angeben. Aber welchen Nutzen habe ich davon? Bekomme ich dann schon früher eine Fehlermeldung, statt dann erst eine Exception?

Diese zusätzliche Arbeit wird man ja nur machen, wenn man auch wirklich einen Vorteil hat. Bei dieser Arbeit wird man auch leicht irgendwelche Abhängigkeiten vergessen können, oder?
 
Zuletzt bearbeitet:
M

maki

Gast
Siehe den Post von ice-Breaker, automatisch ist da nix, muss dem System schon sagen welche Libs du brauchst, musst diese aber nicht manuell runterladen.
 

ice-breaker

Top Contributor
musst diese aber nicht manuell runterladen.

jup, das ist der Punkt, um es zu verdeutlichen:
Du definierst, dass deine Software von log4j abhängt, unter Ant musst du manuell bei jedem neuen Release von log4j die JAR laden, mit Maven sagst du wo diese Software zu finden ist, und Maven holt diese autom.
 

maxxi

Bekanntes Mitglied
musst diese aber nicht manuell runterladen.
AHH!! Warum sagt ihr das nicht gleich? ;)

Hm ... ich glaub, ich hab´s verstanden. Werd ich mal eine kleine Kaffeepause einlegen und nochmals das Theme durchlesen. Aber ich glaube, das kann ich dann schon auf gelöst setzen. :)
 

ARadauer

Top Contributor
Welche Probleme diese Tools lösen, versteht man erst richtig, wenn man diese Probleme mal gehabt hat ;-)
 

maxxi

Bekanntes Mitglied
Wunderbar. Habe ich verstanden.

Nachdem das Thema einen tollen Überblick verschafft, auf welche Arten man so einen Kompilierungsvorgang durchführen kann, hat es sicher wieder ein paar Sternchen verdient.

Thema gelöst.
Thanks all! :)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben