2015-10-28 5 views
5

Ich habe ein Projekt mit ein paar Dutzend Eclipse Plugins, alle miteinander verwandt und leben in verschiedenen Unterordnern. Der Build wurde vor einigen Jahren in eine Manifest-Tycho-Version mit mehreren Modulen konvertiert, und das funktioniert ganz gut.Benutzerdefinierte pom.xml Dateiname in Maven Multimodul für Tycho

Eines der Plugins ist eher wichtig und kann auch als eigenständige Java-App erstellt werden, die keine Eclipse-Laufzeitumgebung verwendet. Derzeit hat es eine eigene POM-Datei (pom-standalone.xml), so dass Jenkins die Standalone-App separat erstellen kann und die Tycho-Build nichts davon weiß - die pom-standalone listet nur die zuvor erstellten Plugin-Jars (danke Tycho!) Und Eclipse-Bibliotheken auf Abhängigkeiten. Paar Probleme mit diesem Ansatz aber:

  • ich nicht so leicht kann IntelliJ verwenden mit Maven Abhängigkeitsmanagement auf das eigenständige Projekt zu arbeiten, weil es nicht die benutzerdefinierten pom-standalone.xml Dateinamen als POM nicht erkennt.

    • Die viele Gläser, die dieses Projekt stützt sich auf in das Projekt im Interesse der Tycho und die Eclipse-Manifest-Datei überprüft, aber sie sind auch von Maven für das Standalone Build verwaltet. Daher müssen alle Abhängigkeiten zur Datei pom-standalone.xml hinzugefügt und in das OSGi-Manifest eingegeben UND für Eclipse-Zwecke in die Quellcodeverwaltung eingecheckt werden.

Es scheint wie eine einfache Abhilfe Tycho/modules zu sagen, wäre etwas anderes zu benutzen als pom.xml für das POM-Submodul, oder vielleicht alle Multimodul POM-Dateien, da Eclipse-diejenigen ohnehin nicht verwenden - dann kann die pom-standalone.xml in pom.xml konvertiert werden und dann wird IntelliJ damit gut.

Ich weiß, dass Sie die -f Attribut zu Maven Builds angeben können, aber wird das wirklich für alle Submodule gelten? Können Sie den POM-Dateinamen für nur ein Submodul angeben?

Gibt es alternative Lösungen? Eclipse/Tycho/p2-Builds scheinen einige Kopfschmerzen zu bereiten, die manuelle Bibliotheksverwaltung und das Einchecken von Bibliotheken zur Quellcodeverwaltung erfordern, aber vielleicht gab es Änderungen, die mir in der Eclipse-Build-Welt in den letzten Jahren nicht bewusst waren.

Gefunden eine Similar Question, die nicht viel geholfen hat.

Antwort

7

Sie können Projekte in ein Aggregator-POM einschließen, indem Sie den vollständigen Namen der POM-Datei mit einem benutzerdefinierten Namen angeben. Beispiel:

Dies funktioniert sowohl in einem reinen Maven und Maven/Tycho Build.

+0

Vielen Dank! Ich konnte diese Information nirgends finden. Nun, wenn ich nur wüsste, wie man all diese Gläser für den Eclipse-Build eincheckt. – tdm

+0

@tdm - Wenn Ihre Gefäße "mvn install" im lokalen Maven-Repository sind oder "mvn deploy" im Remote-Maven-Repository, dann kann Ihr Pom sie einfach als Abhängigkeiten auflisten und maven wird sie für den Build abrufen. Erklären Sie Eclipse, ein 'maven update' durchzuführen, um alle Änderungen im Pom aufzunehmen. –

1

zu verlängern @oberlies ein wenig beantworten:

SZENARIO: Top-Aggregation POM in mehreren Geschmacksrichtungen, so kann jede Art von oben gebaut werden.

<!-- in file pom.xml --> 
<modules> 
    <module>org.example.bundle1</module> 
    <module>org.example.bundle2</module> 
    <module>org.example.keybundle</module> 
</modules> 

Alle Submodule gebaut werden ihr Standard pom.xml

und

mit
<!-- in file pom-tycho.xml --> 
<modules> 
    <module>org.example.bundle1/pom.xml</module> 
    <module>org.example.bundle2/pom.xml</module> 
    <module>org.example.keybundle/pom-tycho.xml</module> 
</modules> 

Submodule mit der speziell genannt POM-Datei erstellt werden.

und ebenso:

<!-- in file pom-special.xml --> 
<modules> 
    <module>org.example.bundle1/pom.xml</module> 
    <module>org.example.bundle2/pom-special.xml</module> 
    <module>org.example.keybundle/pom-tycho.xml</module> 
</modules> 

Submodule, die benutzerdefinierte POM-Dateien verwenden sie haben, und andere meinen sie immer noch die normale POM-Datei möchten, die alle unabhängig von den Namen der Top-Aggregation POM-Datei.

Da mvn -f pom-tycho.xmlgeht davon aus, dass Namen in alle Submodule Datei. Wenn Sie also pom.xml in einem Submodul verwenden möchten, wenn die oberste Datei nicht den Namen pom.xml hat, müssen Sie für jedes Submodul vollständig angeben.