{"id":22363,"date":"2025-01-16T07:21:14","date_gmt":"2025-01-16T06:21:14","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=22363"},"modified":"2025-01-16T07:21:14","modified_gmt":"2025-01-16T06:21:14","slug":"top-3-warum-transitive-abhaengigkeiten-im-maven-explizit-deklarieren","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=22363","title":{"rendered":"TOP 3: Warum transitive Abh\u00e4ngigkeiten im Maven explizit deklarieren?"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/maven-dep.webp\" alt=\"\" width=\"1792\" height=\"1024\" class=\"aligncenter size-full wp-image-22364\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/maven-dep.webp 1792w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/maven-dep-300x171.webp 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/maven-dep-1024x585.webp 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/maven-dep-768x439.webp 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/maven-dep-1536x878.webp 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><br \/>\nIn einem Maven-Projekt ist es wichtig, transitive Abh\u00e4ngigkeiten explizit in der <strong>pom.xml<\/strong> zu deklarieren, wenn sie direkt im Code verwendet werden. Dies ist eine <strong>Best Practice<\/strong>, die aus mehreren Gr\u00fcnden empfohlen wird: <!--more--><\/p>\n<p><strong><br \/>\n1. Stabilit\u00e4t und Konsistenz<\/strong>: Wenn eine Abh\u00e4ngigkeit (z. B. B) auf eine andere Abh\u00e4ngigkeit (z. B. C) verweist und Ihr Projekt direkt auf C zugreift, k\u00f6nnte ein Update oder Entfernen von C in B zu einem Build-Fehler f\u00fchren. Durch die explizite Deklaration von C in Ihrer pom.xml stellen Sie sicher, dass Ihre Abh\u00e4ngigkeit stabil bleibt, unabh\u00e4ngig von \u00c4nderungen in B.<\/p>\n<p><strong>2. Bessere Dokumentation<\/strong>: Eine explizite Deklaration macht die genutzten Bibliotheken Ihres Projekts klarer ersichtlich. Entwickler k\u00f6nnen durch einen Blick in die pom.xml besser verstehen, welche Abh\u00e4ngigkeiten tats\u00e4chlich verwendet werden.<\/p>\n<p><strong>3. Vermeidung von Konflikten<\/strong>: Wenn mehrere Abh\u00e4ngigkeiten unterschiedliche Versionen derselben Bibliothek einbringen, kann dies zu Konflikten f\u00fchren. Durch die explizite Angabe der gew\u00fcnschten Version k\u00f6nnen Sie solche Konflikte vermeiden.<\/p>\n<p>Wie k\u00f6nnen transitive Abh\u00e4ngigkeiten identifiziert werden?<\/p>\n<p>Um herauszufinden, welche transitiven Abh\u00e4ngigkeiten in Ihrem Projekt enthalten sind und welche davon tats\u00e4chlich genutzt werden, k\u00f6nnen Sie das Maven-Plugin <\/p>\n<p><strong>dependency:tree<\/strong><\/p>\n<p>verwenden:<\/p>\n<p><strong>bash<br \/>\nmvn dependency:tree<\/strong><\/p>\n<p>oder auch in Eclipse die Dependency Hierarchy view des Maven-Pom-Editors oder auch dependency:analyze.<\/p>\n<p>Dieses Kommando zeigt die gesamte Abh\u00e4ngigkeitsstruktur Ihres Projekts an, einschlie\u00dflich direkter und transitiver Abh\u00e4ngigkeiten.<\/p>\n<p>Nun noch ein Beispiel f\u00fcr die Deklaration einer transitiven Abh\u00e4ngigkeit.<\/p>\n<p>Angenommen, Ihr Projekt verwendet eine direkte Abh\u00e4ngigkeit B, die wiederum die transitive Abh\u00e4ngigkeit C mitbringt. Wenn Sie Klassen oder Funktionen aus C direkt nutzen, sollten Sie diese wie folgt in Ihrer pom.xml deklarieren:<\/p>\n<pre class=\"lang:yaml decode:true \" >&lt;dependencies&gt;\r\n    &lt;dependency&gt;\r\n        &lt;groupId&gt;com.example&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;B&lt;\/artifactId&gt;\r\n        &lt;version&gt;1.0&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n    &lt;dependency&gt;\r\n        &lt;groupId&gt;com.example&lt;\/groupId&gt;\r\n        &lt;artifactId&gt;C&lt;\/artifactId&gt;\r\n        &lt;version&gt;2.0&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n&lt;\/dependencies&gt;<\/pre>\n<p>Das explizite Deklarieren von transitiven Abh\u00e4ngigkeiten in der pom.xml, wenn sie im Code verwendet werden, ist eine bew\u00e4hrte Methode zur Verbesserung der Stabilit\u00e4t, Lesbarkeit und Wartbarkeit eines Maven-Projekts. Nutzen Sie Tools wie mvn dependency:tree, um Ihre Abh\u00e4ngigkeitsstruktur zu analysieren und sicherzustellen, dass alle ben\u00f6tigten Artefakte korrekt deklariert sind.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In einem Maven-Projekt ist es wichtig, transitive Abh\u00e4ngigkeiten explizit in der pom.xml zu deklarieren, wenn sie direkt im Code verwendet werden. Dies ist eine Best Practice, die aus mehreren Gr\u00fcnden empfohlen wird:<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,3161,5,3163,3515],"tags":[1601,66,2099,5416,5145,6106,6107],"class_list":["post-22363","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-build","category-java","category-maven","category-tip","tag-abhaengigkeiten","tag-maven","tag-mvn","tag-pom","tag-pom-xml","tag-transitiv","tag-transitive"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/22363","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=22363"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/22363\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=22363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=22363"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=22363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}