2012-04-11 2 views
0

Wenn ein Projekt viele Unterprojekte hat und alle Unterprojekte eine gemeinsame Eltern-pom.xml haben, sollten nicht alle Abhängigkeiten in der Eltern-pom.xml aufgeführt sein?Maven-Unterprojekte - sollten sie ihre eigenen Abhängigkeiten haben

Was ist der Grund dafür, dass Unterprojekte ihre eigenen Abhängigkeiten haben? Es eröffnet nur die Möglichkeit, dass ein Unterprojekt apache_xyzlibrary_1.0.jar verwendet und ein anderes Unterprojekt _2.0.jar?

Hinweis: Alle maven-Teilprojekte werden zu einem einzigen webapp WAR kombiniert.

Antwort

3

Es wird sehr ineffizient sein, alle Projektabhängigkeiten in jedes Unterprojekt einzubeziehen, da Sie auf diese Weise unnötige Abhängigkeiten in jeden Build der Unterprojekte einbringen. Und ein anderes Problem ist, wenn Sie zwischen Unterprojektabhängigkeit haben, d. H. Unterprojekt a abhängig von Unterprojekt b, dann können Sie leicht eine Zyklusabhängigkeit erreichen, die nicht gelöst werden kann.

Um die Konsistenz von Abhängigkeitsversionen über das Projekt hinweg beizubehalten, besteht der Ansatz von Maven darin, den Abschnitt Abhängigkeitsverwaltung im übergeordneten Pom des Projekts zu verwenden. Legen Sie daher nur die Version jeder Abhängigkeit im Abhängigkeitsverwaltungsabschnitt des übergeordneten Pom fest. Im Pom des Unterprojekts wird nur die Gruppen-ID und die Artefakt-ID angegeben. Kein Versions-Tag sollte im Pom des Unterprojekts verwendet werden, außer es wird benötigt (dh wenn ein Unterprojekt eine bestimmte Version einer Abhängigkeit benötigt, die sich vom Rest des Projekts unterscheidet)

+1

Es wird nett sein, wenn diese Anordnung eine Standardpraxis ist, wobei das Elternpom eine vollständige Definition der Abhängigkeit hat (dh die Versionsnummer enthält) und das Unterprojekt lediglich die Abhängigkeit "auflistet" und es dem Eltern ermöglicht, die Version zu diktieren . – rk2010

+0

Ich stimme zu, es wäre schön, wenn diese Praxis mehr gefördert würde, aber ich denke, es wäre zu viel zu sagen, es sollte durchgesetzt werden. Maven bietet oft viele verschiedene Möglichkeiten, etwas zu erreichen. Ich denke, ein Build zeigt Warnungen an, wenn mehrere Projekte auf verschiedene Versionen der gleichen Abhängigkeit verweisen, so dass es in Ihrem Gesicht liegt, wenn Sie etwas tun, das möglicherweise schlecht ist. –

0

Wenn alle untergeordneten Elemente die gleiche Abhängigkeit angeben, empfiehlt es sich, diese Abhängigkeit stattdessen im übergeordneten Element anzugeben. Sie haben damit recht, dass alle Projekte konsistente Versionen von Abhängigkeiten verwenden.

Warum entschieden die Maven-Entwickler, Abhängigkeiten in untergeordneten Projekten zu deklarieren, wenn dies die Verwendung verschiedener Versionen der gleichen Abhängigkeit ermöglicht? Ich denke, sie dachten, der Vorteil von lokal deklarierten Abhängigkeiten in Projekten wäre, wenn sie sich von Geschwisterprojekten unterscheiden, schöner, als die Eltern zu beschränken, alle Abhängigkeiten für alle ihre untergeordneten Elemente zu deklarieren.

Denken Sie daran wie Variablen in verschiedenen Bereichen in einer Klasse deklariert. Wenn Sie eine private Variable in einer Methode haben, wissen Sie, dass sie nur in der einen Methode verwendet wird und Sie sie nach Belieben ändern können, ohne sich um die gesamte Codebasis kümmern zu müssen. Wenn Sie ein privates Feld in einer Klasse haben, müssen Sie alle Benutzungen in dieser Klasse beachten, aber nicht in anderen Dateien. Wenn Sie eine öffentliche Variable haben, haben Sie die Idee. Abhängigkeiten sind die gleichen, wenn Sie eine für ein einzelnes Projekt deklariert haben, können Sie sicher sein, dass sie nur für das einzelne Projekt benötigt wird. Darüber hinaus muss es nicht vorhanden sein, wenn Sie ein anderes untergeordnetes Projekt desselben Elternteils erstellen.

Sie haben recht, wenn Sie verschiedene Versionen der gleichen Abhängigkeit in verschiedenen untergeordneten Projekten verwenden, werden Sie wahrscheinlich mit dem endgültigen Artefakt betrübt. Seien Sie sich bewusst, dass es andere Projekttypen und Build-Zyklen gibt, bei denen gemischte Versionsnummern zwischen Projekten kein Problem darstellen und tatsächlich erwünscht sind.

Denken Sie daran, dass Maven Eltern Pom-Dateien auch Eltern haben können. Dies ermöglicht mehr Ebenen einer Hierarchie als nur zwei Ebenen. Ich denke, es wäre lächerlich, wenn alle untergeordneten Projekte ihre Abhängigkeiten in der übergeordneten Pom-Datei des übergeordneten Projekts deklarieren müssten.

+0

Ich stimme der Variablendichtungsanalogie nicht ganz zu . Also nicht dasselbe. Ich denke Abhängigkeiten sollten in "Elternteil des Krieges" aufgelistet sein. (oder "Ohr" .. was auch immer das Artefakt ist). Was denkst du? – rk2010

+0

@ rk2010 - Ich denke, Sie sollten Maven Abhängigkeiten genauso wie Variable Umfang behandeln; Sie können den Gültigkeitsbereich verwenden, um auf einfache Weise zu ermitteln, welche Codeebene mit einer bestimmten Variablen zu tun hat. Wenn Sie sicherstellen möchten, dass zwei Dinge denselben Wert verwenden, müssen sie dieselbe Variable referenzieren, anstatt sie zweimal zu deklarieren möglicherweise nicht mehr synchron. Was "Ich denke, Abhängigkeiten sollten im Elternteil des Krieges aufgelistet sein", das ist, was ich verstanden habe Ihre ursprüngliche Frage, die Sie gestellt haben gefragt. Meine Antwort erklärt, was ich denke. –