Maven - Parent oder Dependency?

Klausinator

Mitglied
Hallo zusammen :)
Ich habe vor kurzem ein Java-Projekt übernommen, welches ich gerne weiterentwickeln möchte.

Es existiert ein Spring-Basisprojekt in dem bereits die wesentlichen Grundfunktionalitäten (User-Verwaltung, Template usw) implementiert sind.

Mein aktuelles Projekt hat das Basisprojekt als Dependency und erweitert die Funktionalitäten. Der Vorentwickler hat fast alle Abhängigkeiten - egal ob vom Basisprojekt oder vom Projekt genutzt - direkt in das Basisprojekt gepackt. Im Projekt wurde dann zum größten Teil direkt auf die transitive Dependencies zugegriffen.

Wenn ich die Dependencies nun im Basisprojekt aufräume und ggf viele auch ins Projekt verschiebe, dann habe ich zB das Problem, dass ich auf die Version-Properties, welche sich im Basisprojekt befinden, nicht zugreifen kann. Dh ich pflege die Version zweimal, wenn ich zB im Projekt ein weiteres Spring-Modul einbinden will. Zusätzlich wirft mir maven dependency:analyze zahlreiche "used undeclared dependencies" um die Ohren, weil diese nicht direkt im Projekt sondern nur als transitive Abhängigkeit zur Verfügung stehen.

Ich bin nun am überlegen, ob sich diese Struktur für einen Parent-Aufbau eignet. Bisher habe ich hiermit noch keine Erfahrungen und würde mich deshalb über eine erste Einschätzung von euch freuen.

Ich freue mich auf eure Antworten.

Beste Grüße aus Sachsen
Klaus
 

LimDul

Top Contributor
Wir haben hier in der Firma ein ähnliches Problem - X Projekte und Bibliotheken und diverse Abhängigkeiten zwischen Projekten.

Wenn Projekt A die Bibliothek X nutzt und Projekt B die Bibliothek X auch nutzt, aber auch Projekt A als Abhängigkeit einbindet, dann möchte man, dass die Versionen möglichst konsistent sind.

Ergebnis:

Es gibt bei uns ein explizites Parent-Project (xx-commons-pom), dass alle unsere Projekte als Parent-POM nutzen. Das macht nichts anderes als einen Haufen Versionen festzulegen und im Dependency Management die meist genutzten Artefakte zur Verfügung zu stellen.

Dadurch ist relativ gut sichergestellt, dass die verwendeten Abhängigkeiten konsistent sind. Sollte dann tatsächlich Projekt A eine Biblitohek verwenden, die auch Projekt B verwendet, aber nicht in der parent POM drin ist - dann muss ich es tatsächlich doppelt pflegen. Aber das kommt selten vor.
 

Klausinator

Mitglied
Wir haben hier in der Firma ein ähnliches Problem - X Projekte und Bibliotheken und diverse Abhängigkeiten zwischen Projekten.

Wenn Projekt A die Bibliothek X nutzt und Projekt B die Bibliothek X auch nutzt, aber auch Projekt A als Abhängigkeit einbindet, dann möchte man, dass die Versionen möglichst konsistent sind.

Ergebnis:

Es gibt bei uns ein explizites Parent-Project (xx-commons-pom), dass alle unsere Projekte als Parent-POM nutzen. Das macht nichts anderes als einen Haufen Versionen festzulegen und im die meist genutzten Artefakte zur Verfügung zu stellen.

Dadurch ist relativ gut sichergestellt, dass die verwendeten Abhängigkeiten konsistent sind. Sollte dann tatsächlich Projekt A eine Biblitohek verwenden, die auch Projekt B verwendet, aber nicht in der parent POM drin ist - dann muss ich es tatsächlich doppelt pflegen. Aber das kommt selten vor.
Vielen Dank für deine Antwort.

Ich denke dass es auf eine separat POM, wie von dir erklärt, hinauslaufen wird. Mittlerweile habe ich auch festgestellt, dass eine Parent-POM keine Source-Dateien den Childs zur Verfügung stellt - womit mein im Eingangspost genannter Plan hinfällig ist 🙈
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn es vorrangig um das Festsetzen der Versionen geht, bietet sich auch ein "Bill of Materials" an.

Das ist ein "leeres" Maven-Projekt (also packaging-Type ist pom, und es gibt keinen Code), welches alle Dependencies in dependencyManagement angibt, nicht direkt in dependencies:

[CODE lang="xml" title="BOM"]<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>bom</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>project1</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>project2</artifactId>
<version>2.4.5</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
[/CODE]

Andere Projekte können dann dieses Projekt "importieren" und damit die Dependency-Versionen übernehmen.
XML:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>bom</artifactId>
            <version>1.2.3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
         <groupId>com.example</groupId>
         <artifactId>project1</artifactId>
    </dependency>
</dependencies>
 

Klausinator

Mitglied
Das hört sich schonmal sehr gut an.

Wie wäre eigentlich die richtige Vorgehensweise, wenn ich SpringBoot verwenden möchte? Würde ich SpringBoot als Parent vom Basisprojekt oder Projekt einbinden? Ich möchte sowohl im Basisprojekt als auch im Projekt die Möglichkeit haben, weitere Spring Module hinzuzufügen.


Viele Grüße
 

mrBrown

Super-Moderator
Mitarbeiter
Wie wäre eigentlich die richtige Vorgehensweise, wenn ich SpringBoot verwenden möchte? Würde ich SpringBoot als Parent vom Basisprojekt oder Projekt einbinden? Ich möchte sowohl im Basisprojekt als auch im Projekt die Möglichkeit haben, weitere Spring Module hinzuzufügen.

Wenn man es als Parent nutzen will, müsste es am ehesten Parent von beiden sein.

Man braucht aber Spring auch gar nicht als Parent nutzen, man kann das als BOM einbinden (für die Dependencies) und die nötigen Plugin-Konfigurationen selbst übernehmen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Maven Parent- Child POMs Tools - Maven, Gradle, Ant & mehr 13
P Maven Parent und Child Poms - dependencies Tools - Maven, Gradle, Ant & mehr 1
D [Maven Pluginentwicklung] - Plugin das nur auf Parent pom läuft Tools - Maven, Gradle, Ant & mehr 0
B Maven: parent artifactId und child artifactId gleich Tools - Maven, Gradle, Ant & mehr 3
Oneixee5 Maven deploy - per SSH Tools - Maven, Gradle, Ant & mehr 6
H Maven kein Hauptmanifestattribut Tools - Maven, Gradle, Ant & mehr 10
M Programm mit Maven erstellen und starten samt Abhängigkeiten Tools - Maven, Gradle, Ant & mehr 27
D Interne Dependencies in Maven Tools - Maven, Gradle, Ant & mehr 51
J log4j2 mit Hibernate über Maven Tools - Maven, Gradle, Ant & mehr 10
thor_norsk Maven Build Failed: kann nicht von start.spring.io generiertes Projekt auf IntelliJ IDE starten Tools - Maven, Gradle, Ant & mehr 8
H Maven JUnit5 Tests werden ignoriert Tools - Maven, Gradle, Ant & mehr 5
thor_norsk Maven Tools - Maven, Gradle, Ant & mehr 32
ExceptionOfExpectation Maven Build Failed: kann nicht von start.spring.io generiertes Projekt auf Eclipse starten Tools - Maven, Gradle, Ant & mehr 20
Ich kann Maven nicht als UmgebungsVariable hinzufügen Tools - Maven, Gradle, Ant & mehr 2
F Maven JAR Plugin Probleme Tools - Maven, Gradle, Ant & mehr 4
W Was "braucht" man denn alles? Maven, Ant, Git, ... Tools - Maven, Gradle, Ant & mehr 21
N Fehler beim Imgui mit Maven Tools - Maven, Gradle, Ant & mehr 7
M Spring Boot Maven pom.xml-Eintrag Tools - Maven, Gradle, Ant & mehr 17
Encera JavaFX und Maven funktioniert nicht Tools - Maven, Gradle, Ant & mehr 1
B maven multi module Projekt und unnötige/zusätzliche Leerzeilen Tools - Maven, Gradle, Ant & mehr 4
J Maven Konfusion Tools - Maven, Gradle, Ant & mehr 7
Tippster Maven Sqlite integrieren (Eclipse, Maven) Tools - Maven, Gradle, Ant & mehr 4
T Image kreieren mit Maven bei JavaFX und nicht modularen Jars Tools - Maven, Gradle, Ant & mehr 12
T JSON Dependencies in Maven Tools - Maven, Gradle, Ant & mehr 7
T JavaFX, Jar über Maven kreieren Tools - Maven, Gradle, Ant & mehr 2
Encera Libraries Maven Projekt hinzufügen Tools - Maven, Gradle, Ant & mehr 9
Oneixee5 Maven Phase Tools - Maven, Gradle, Ant & mehr 3
Robertop maven copy-resources nicht in WAR Datei Tools - Maven, Gradle, Ant & mehr 2
T Maven: Probleme beim Einbinden der Dependencies Tools - Maven, Gradle, Ant & mehr 9
M Mit Maven eine jar Datei bauen ohne irgendeine main Methode Tools - Maven, Gradle, Ant & mehr 1
M Mit Maven eine jar Datei Bauen ohne irgendeine main Methode Tools - Maven, Gradle, Ant & mehr 18
H Maven Maven: <mainClass>NAME?</mainClass> Tools - Maven, Gradle, Ant & mehr 13
H Maven maven-source-plugin is missing Tools - Maven, Gradle, Ant & mehr 5
M Missing Artifact on selbst gehostestes Maven Paket Tools - Maven, Gradle, Ant & mehr 8
M Error code 409 maven Tools - Maven, Gradle, Ant & mehr 5
M github + maven Fehler beim repository erstellen Tools - Maven, Gradle, Ant & mehr 1
M durch Maven wird "var" nicht gefunden Tools - Maven, Gradle, Ant & mehr 4
N Maven Intellij Maven Projekt erstell keine src Tools - Maven, Gradle, Ant & mehr 4
LimDul Maven Einzelne Unit Tests in Maven Builds skippen Tools - Maven, Gradle, Ant & mehr 3
M Maven jpackage-image wird nicht gefunden Tools - Maven, Gradle, Ant & mehr 22
M javafx wird in einem alten programm nicht bei maven gefunden Tools - Maven, Gradle, Ant & mehr 15
L Maven IntelliJ, Maven und JavaFX + SceneBuilder Tools - Maven, Gradle, Ant & mehr 23
von Spotz Maven und Spring: "Add to classpath" ? Tools - Maven, Gradle, Ant & mehr 29
Kirby.exe Projekt mit Maven kompilieren Tools - Maven, Gradle, Ant & mehr 13
P Maven Projekt Abhängigkeiten auf bekante Schwachstellen prüfen Tools - Maven, Gradle, Ant & mehr 4
H Maven dependency Problem ? Tools - Maven, Gradle, Ant & mehr 23
B Maven und Intellij Tools - Maven, Gradle, Ant & mehr 24
P Maven Test werden nicht ausgeführt . Junit . Maven . Surefire . Eclipse Tools - Maven, Gradle, Ant & mehr 12
yakazuqi Maven Eigene API mit Maven einbinden Tools - Maven, Gradle, Ant & mehr 1
M Was ist besser für den Anfang, Maven oder Gradle? Tools - Maven, Gradle, Ant & mehr 6
P Maven Wie die Maven Project version in JSP page verwenden? Tools - Maven, Gradle, Ant & mehr 2
C Maven Multi-Module Projekt Tools - Maven, Gradle, Ant & mehr 2
T Maven Warnings/Fehlermeldungen Tools - Maven, Gradle, Ant & mehr 12
T Maven und Datenbank(treiber) Tools - Maven, Gradle, Ant & mehr 13
T Maven Runnable Jar Tools - Maven, Gradle, Ant & mehr 5
T Grundlagen Maven und Git/Github Tools - Maven, Gradle, Ant & mehr 2
LimDul Maven Maven Surefire Plugin - Warnings upgrade Tools - Maven, Gradle, Ant & mehr 2
G Maven upload Tools - Maven, Gradle, Ant & mehr 0
B Maven Maven deploy Tools - Maven, Gradle, Ant & mehr 4
H Jenkins keine Tests gefunden - aber in Maven Tools - Maven, Gradle, Ant & mehr 30
P Mit Maven einen spezifischen Branch nach Tag-Parameter erstellen (in Jenkins-Job) Tools - Maven, Gradle, Ant & mehr 3
P Nur einen Teilbaum in Maven releasen? Tools - Maven, Gradle, Ant & mehr 7
D Cannot invoke "javafx.scene.control.MenuButton.getScene()" nach konvertierung zu maven Tools - Maven, Gradle, Ant & mehr 3
H Maven - keine Durchführung von Tests Tools - Maven, Gradle, Ant & mehr 12
H Jenkins - maven-jar-plugin - kein jar-file Tools - Maven, Gradle, Ant & mehr 38
P JavaFX jar mit Maven Tools - Maven, Gradle, Ant & mehr 9
P Maven & Intellij Modul kann nicht aufgelöst werden Tools - Maven, Gradle, Ant & mehr 12
H Eclipse JUnit erzeugt Fehler im Maven-Test Tools - Maven, Gradle, Ant & mehr 1
H Maven Anfängerproblem - No plugin found for prefix 'archetype' in the current project and in the plugin groups Tools - Maven, Gradle, Ant & mehr 25
sascha-sphw Maven vs Gradle Tools - Maven, Gradle, Ant & mehr 24
D Maven Maven und die Build-Geschwindigkeit Tools - Maven, Gradle, Ant & mehr 11
K Maven IntelliJ + Maven + JavaFX Tools - Maven, Gradle, Ant & mehr 2
J Maven Mit Maven eine ZIP Datei erstellen Tools - Maven, Gradle, Ant & mehr 0
K Maven install schlägt fehl Tools - Maven, Gradle, Ant & mehr 10
I Problem: Maven import extern Lib Tools - Maven, Gradle, Ant & mehr 3
Tom299 Maven Maven funktioniert nach Installation nicht Tools - Maven, Gradle, Ant & mehr 1
I Maven Interface hinzugefügt - Error Tools - Maven, Gradle, Ant & mehr 1
M Verständnisfrage Maven Tools - Maven, Gradle, Ant & mehr 2
S Maven installieren - "Befehl wurde nicht gefunden" Tools - Maven, Gradle, Ant & mehr 1
E Maven: Wie Abhängigkeiten analysieren? Tools - Maven, Gradle, Ant & mehr 0
E Maven Maven distributionManagement Vererbung in child POM Tools - Maven, Gradle, Ant & mehr 8
E Release Kandidaten mit Maven bauen Tools - Maven, Gradle, Ant & mehr 4
C Orderstruktur bei Libarys - Wie mit Ant oder Maven lösen? Tools - Maven, Gradle, Ant & mehr 0
G Maven, finde Dependency nicht... Tools - Maven, Gradle, Ant & mehr 2
G Maven Continious Integration mit Jenkins, Maven und Nexus - wie richtig? Tools - Maven, Gradle, Ant & mehr 1
reibi Maven Maven + Eclipse Tools - Maven, Gradle, Ant & mehr 0
P Maven add resource Tools - Maven, Gradle, Ant & mehr 0
S Maven Maven und Auflösen von JSF EL Tools - Maven, Gradle, Ant & mehr 5
H Maven HSQLDB in den Maven lifecycle einbinden Tools - Maven, Gradle, Ant & mehr 5
S Maven Unterschiedliche Deployments mit Maven Tools - Maven, Gradle, Ant & mehr 2
S Maven buildnumber-maven-plugin / Formatproblem mit timestamp Tools - Maven, Gradle, Ant & mehr 17
P Erzeugen von WebServices mit Maven und Eclipse (external Tool) Tools - Maven, Gradle, Ant & mehr 2
aze Maven downgraden von 3.x auf 2.09 unter Linux Tools - Maven, Gradle, Ant & mehr 4
Rudolf JSF und Maven mit Eclipse Tools - Maven, Gradle, Ant & mehr 5
M Maven-Dependency kann nicht gefunden werden Tools - Maven, Gradle, Ant & mehr 2
M Maven imports aus Modulen Tools - Maven, Gradle, Ant & mehr 4
P multimodul maven in SVN Tools - Maven, Gradle, Ant & mehr 3
D [Maven] neuerdings "No plugin found for prefix ..." errors Tools - Maven, Gradle, Ant & mehr 7
C Automatisches Deployen in ein externes Maven Repository. Tools - Maven, Gradle, Ant & mehr 5
D JUnit Test in Maven fail und in Eclipse erolgreich Tools - Maven, Gradle, Ant & mehr 4

Ähnliche Java Themen

Neue Themen


Oben