# Maven und einzelne Projektmodule



## ankoe (11. März 2009)

Hallo,
ich habe bin mit dem Einsatz von Maven erst ganz am Anfang. habe auch schon viel gegoogelt, aber zu meiner Frage keine mir schlüssige Antwort gefunden.
In meinem Projekt sind Abhängigkeiten zu verschiedenen anderen Projekten enthalten. Diese einzelnen Projekte sind ebenfalls von anderen Projekten (z.B. ein Framework wird in allen anderen Projekten benötigt) abhängig. Also z.B. Projekt A ist das Framework, Projekt B benutzt Klassen aus diesem Framework. Ich beschreibe das Framework Projekt mittels Maven. Wenn ich nun  Projekt B mittels Maven beschreibe, möchte ich beim Compilieren von Projekt B auch Projekt A mit compilieren. Wie muss die pom.xml aussehen um das zu gewährleisten? Müssen Module definiert werden?

Ich bin für jeden Hinweis dankbar.

Gruß Andrea


----------



## Oliver Gierke (11. März 2009)

Zusammen kompilieren kannst du sie nur, wenn es ein POM Projekt (packaging pom) geben, was die beiden Module als Module enthält:

```
<modules>
  <module>projectA</module>
  <module>projectB</module>
</modules>
```
Hierbei sind projectA und projectB relative Pfade zu der pom.xml die den modules-Block deklariert. Im Normalfall gibt es halt ein Parentproject, dass zum einen gemeinsame Dependencies deklariert und die Module definiert:

```
root
+-projectA
| +-pom.xml
+-projectB
| +-pom.xml
+-pom.xml
```

Als Einstieg kann ich dir das Sonatype Mavenbuch empfehlen. Komplett online lesbar: http://www.sonatype.com/products/maven/documentation/book-defguide

REINHAUN!


----------



## zeja (11. März 2009)

Aber nur weil sie voneinander abhängig sind müssen sie ja nicht zusammen kompiliert werden. Wenn es sich um ein Framework handelt und etwas was das Framework benutzt, hat das für mich nichts mit Modulen zu tun. Nur weil man am einen was programmiert muss doch nicht das andere unbedingt kompiliert werden oder?

Ein deploy oder install von A wenn sich was geändert hat sollte in dem Fall ausreichen. B hat dann eine einfache Dependency auf A.


----------



## Oliver Gierke (11. März 2009)

Sehr richtig. Die Frage ist, ob sich die Module "zusammen" ändern. Wir nutzen die Maven Module um Abhängigkeiten explizit zu machen und Subsysteme voneinander zu isolieren. Hier kommt es vorallem während der initialen Entwicklung oft dazu, dass man mehrere Module anfasst. Hierbei ist es dann schon günstig ein pom-Projekt zu haben, dass mal eben alles frisch kompiliert.

Wenn man m2Eclipse nutzt, werden Abhängigkeiten, die als Projekte im Workspace liegen sogar direkt aufgelöst, so dass man nicht nach jeder Änderung in einer Abhängigkeit mvn install rufen muss.

Ist ein wenig eine Frage des Geschmacks .

REINHAUN!


----------



## ankoe (12. März 2009)

Hallo,
also erst einmal vielen Dank für eure Antworten.
Der Hinweis auf das online Buch war prima, da werde ich mich erst einmal einlesen. Bis jetzt haben wir in Eclipse unsere Projekte als Java Projekte entwickelt. Projekte, die andere Projkete benötigen wurden im Build Path als Projekt eingebunden und fertig. Zur Auslieferung des Produktes wurden dann aus den abhängigen Projekten jar Dateien generiert. 
Wahrscheinlich ist es besser, die einzelnen Projekte  nicht als Module einzubinden sondern als dependencies.
Weil du gerade m2Eclipse erwähnst. Änderungen im Projket A bekommt ProjektB mit. Wenn ich nun ein endgültiges Release fertig machen möchte, muss ich dann erst für alle einzelnen Projekte mvn install auf der Kommandozeile aufrufen und dann ebenfalls auf der Kommandozeile das Release zusammenpacken?

Gruß Andrea


----------



## Oliver Gierke (12. März 2009)

ankoe hat gesagt.:


> Hallo,
> also erst einmal vielen Dank für eure Antworten.
> Der Hinweis auf das online Buch war prima, da werde ich mich erst einmal einlesen. Bis jetzt haben wir in Eclipse unsere Projekte als Java Projekte entwickelt. Projekte, die andere Projkete benötigen wurden im Build Path als Projekt eingebunden und fertig. Zur Auslieferung des Produktes wurden dann aus den abhängigen Projekten jar Dateien generiert.
> Wahrscheinlich ist es besser, die einzelnen Projekte  nicht als Module einzubinden sondern als dependencies.


Eigentlich machst du ja beides. Die Moduldeklaration sorgt ja nur dafür, was zusammen gebaut wird, bzw. (bei der Benutzungdes Eclipseplugins) welche Projekte ausgecheckt werden. Man kann z.B. auf dem parent Projekt sagen "Check out as Maven project..." und das Eclipse checkt dir sauber alle Module als extra Projekte aus - feine Sache.



> Weil du gerade m2Eclipse erwähnst. Änderungen im Projket A bekommt ProjektB mit. Wenn ich nun ein endgültiges Release fertig machen möchte, muss ich dann erst für alle einzelnen Projekte mvn install auf der Kommandozeile aufrufen und dann ebenfalls auf der Kommandozeile das Release zusammenpacken?
> 
> Gruß Andrea


Du kannst per m2Eclipse natürlich "Run As... -> mvn install" auf dem parent Projekt rufen und somit alle Artefakte bauen. Allerdings machen wir SNAPSHOT deployments immer von der Kommandozeile u sicherzugehen, dass das auch für nicht IDEler (Admins) tut. Desweiteren erleichtert das Releaseplugin solche Arbeiten enorm (Version hochzählen, Tags im SVN machen usw.)

Hab ich schon erwähnt, dass wir Maven Consulting machen? ...

Gruß
Ollie


----------



## ankoe (13. März 2009)

Hallo Oliver,
erst einmal vielen Dank für deine Bemühungen. Ich sehe schon, da gibt es noch einiges, was mir wohl eher nicht ganz klar ist. Jetzt werde ich erst einmal versuchen, mich durch das online Buch durchzuarbeiten, bevor ich wieder nerve. Was genau ist denn mit Maven Consulting gemeint?

Gruß Andrea


----------



## Oliver Gierke (13. März 2009)

Hier nervt niemand. Wenn Fragen auftauchen, immer raus damit! Zu der anderen Frage schreib ich dir ne PM 

Gruß
Ollie


----------

