2012-09-26 4 views
5

Ich habe die in einem flachen strukturiert organisiert folgende Projekte:Maven Multi-Modul-Projekt und Jenkins

parentProject 
+-pom.xml 

projectWeb <depends on libraryA and libraryB> 
+-pom.xml 

libraryA 
+-pom.xml 

libraryB 
+-pom.xml 

Die pom.xml innerhalb des parentProject hat Verweise auf die anderen Module und seine verwendet für die Vererbung und dependencyManagement, hier ist ein Ausschnitt:

<project> 
    .... 
    <modules> 
     <module>../projectWeb</module> 
     <module>../libraryA</module> 
     <module>../libraryB</module> 
    </modules> 
    <dependencyManagement> 
    ... 
    </dependencyManagement> 
    <build> 
    ... 
    </build> 
    .... 
</project> 

In Jenkins ich einen maven-Job für jedes Projekt, und es funktioniert gut, wenn ich die parentProject bauen, das heißt. Erstellt jedes Projekt, auf das im Abschnitt modules verwiesen wird. Das Problem, das ich habe, wenn ich eine SVN Änderung in libraryA begehe, würde ich erwarten, dass nach dem Erstellen von libraryA, eine Wiederherstellung auf projectWeb gestartet werden, aber das ist nicht geschehen. Wer weiß, was mache ich falsch?

Vielen Dank im Voraus.

EDIT

Wenn ich den modules Abschnitt von parentProject\pom.xml entfernen, funktioniert es als espected, aber ich verliere die Aggregation Vorteil der Verwendung eine Mutter pom hat.

Antwort

0

Dies sollte in jenkins Job konfiguriert werden. Siehe „libraryA Job“/„Konfiguration“/„Build-Trigger“/„Bauen nach anderen Projekten gebaut werden“

+0

Danke für die Antwort, aber wie ich die bearbeitete Frage einfüge, Wenn ich die Module aus dem Elternpom entferne, werden die Builds wie erwartet ausgelöst, dh wenn ich 'libraryA' baue, wird' proyectWeb' automatisch aufgebaut, ohne die Konfiguration du erwähntest. – sivainvi

1

Es sieht aus wie Sie Ihre Mutter POM fragen, zwei Dinge zu tun:

  1. einrichten Abhängigkeitsmanagement Sachen
  2. Aggregate Build

Es ist im allgemeinen besser, wenn man diese in zwei poms aufzuschlüsseln - ein Elternteil pom für # 1 und einem Aggregat pom für # 2. Sie würden dann so etwas wie haben ..

[root dir] aggregate pom.xml 
+ /parent 
+ /web 
+ /libA 
+ /libB 

Sehen Sie diese Antwort für weitere Informationen: https://stackoverflow.com/a/3301162/211993

Sie würden dann Jenkins konfigurieren Sie die Root-Verzeichnis zu überprüfen, und führen Sie „mvn saubere Installation“

+2

Können Sie bitte erläutern, warum "Es ist generell besser, wenn Sie sich trennen ..."? Ich sage nicht, dass es nicht ist, aber ich verstehe nicht, warum es besser ist. Leider habe ich es nicht aus der Antwort verstanden, auf die du verlinkt bist. Vielen Dank! – Ittai

+1

Also, zunächst hilft es nur bei der Trennung von Bedenken - der Aggregator ist verantwortlich für die Reihenfolge, in der Module gebaut werden, der Elternteil ist verantwortlich Abhängigkeit Versionen und Dinge wie SCM Verbindungsdetails. – dan

+1

Ich habe auch Beispiele gesehen, wo Menschen ihre Eltern Pom in gemeinsame Teile zerlegt haben, die dann die Eltern für andere Elternteile werden. Nehmen wir zum Beispiel an, Sie haben ein paar Projekte, die Hibernate verwenden, Sie können diese Versionierung in einen Eltern-Pom im Hibernate-Modus ziehen und dann als "Super-Elternteil" verwenden (sozusagen habe ich diesen Satz einfach gemacht)) Sie erhalten konsistente Versionen der Hibernate-Bibliothek für mehrere Projekte, die nicht anderweitig verknüpft sind. Aber stellen Sie sicher, dass Sie diesen gemeinsamen Ansatz wirklich wollen; Du koppelst mehrere Projekte zusammen, was vielleicht nicht wünschenswert ist. – dan