Wir haben ein Maven 2-Projekt mit vielen Modulen. Beispiel:
<modules>
<module>common</module>
<module>foo</module>
<module>data</module>
<module>bar</module>
... more ...
</module>
Angenommen, die Erstellung des "Daten" -Moduls ist zeitaufwändig und wir möchten es ausschließen, wenn das Projekt von einem CI-Server erstellt wird. Derzeit verwenden wir zwei pom.xml-Dateien, um dies zu erreichen. Eines enthält alle Module und das andere enthält alle Module mit Ausnahme derjenigen, die für CI weggelassen werden können. Aber das ist ziemlich ärgerlich, weil wir manchmal vergessen, ein neues Modul in beide Dateien zu setzen.
Gibt es eine Lösung, die keine zwei separaten Modullisten benötigt?
Mit Maven 3.2.1 können Sie jetzt
-pl !<module_name>,!<module_name>
bestimmte Module vom Reaktoraufbau ausschließen.Siehe diese Funktionsanforderung: https://issues.apache.org/jira/browse/MNG-5230
quelle
-
anstelle von!
, dh-pl -<module_name>
Die zu erstellenden Projekte können auch in der Befehlszeile von mvn angegeben werden. Dies würde die Notwendigkeit eines separaten POMs beseitigen, aber stattdessen müssten Sie die CI-Konfiguration jedes Mal ändern, wenn ein neues Modul vorhanden ist.
Vielleicht eine Kombination dieser Flagge und /
--also-make-dependents
oder--also-make
würde diesen Wartungsaufwand wieder reduzieren.quelle
mvn clean install -pl mysubproject
Ich gehe davon aus, dass der Standard-Build unabhängig von der Geschwindigkeit immer alles erstellen soll, damit neue Entwickler schnell loslegen können, ohne viel über das POM verstehen zu müssen. Sie können folgende Profile verwenden:
Das Problem dabei ist, dass, wenn ein Entwickler ein anderes Profil in der Befehlszeile angibt, das
expensive-modules-to-build
nicht enthalten ist (es sei denn, der Entwickler gibt es auch an). Dies macht es kompliziert, sich zu merken, welche Profile enthalten sein müssen.Hier ist ein hackiger Weg, um das zu umgehen. Beide Profile sind immer enthalten, da die Datei pom.xml immer vorhanden ist. Um die teuren Module auszuschließen, können Sie sie
-P!full-build
in der Befehlszeile verwenden.quelle
-pl !<module_name>,!<module_name>
besser ist als diese alteEine andere Idee: Reaktormodule können verschachtelt werden, daher sollte es möglich sein, Ihre schnell und langsam aufbauenden Module in separate Poms zu gruppieren und dann einen weiteren Aggregator-Pom hinzuzufügen, der diese beiden als Module enthält. Ihr CI-Server konnte dann nur auf den POM verweisen, der die Fast-Building-Module enthält.
quelle
Sie könnten Maven- Profile verwenden . In unserer Build-Umgebung haben wir ein Profil erstellt
quick
, das viele Plugins und die Testausführung deaktiviert.Dies geschieht durch
Und dann rufen wir maven folgendermaßen auf
Sie könnten möglicherweise die Kompilierung und andere Standard-Plugins im POM Ihres Moduls deaktivieren, um es zu beschleunigen.
quelle
Nicht genau die Antwort, nach der diese Leute fragten. Meine Situation war, dass ich nur den übergeordneten POM bereitstellen wollte. Ich benutze das
spring-boot-thin-layout
in einem untergeordneten Modul. Dies erfordert, dass das übergeordnete Modul in Artifactory bereitgestellt wird. Ich habe folgendes in mein Projekt aufgenommen. Es ermöglicht das Überspringeninstall
und / oder diedeploy
Phase.In meinem Eltern pom:
Und die in meinem Kind Pom (s) oder ein Modul, das Sie nicht mit Eltern bereitstellen möchten:
Wenn ich also
mvn deploy
auf dem übergeordneten POM ausgeführt werde, werden alle Module kompiliert, keine Installation auf irgendetwas ausgeführt und am Ende alle Module bereitgestellt<maven.deploy.skip>${disable.deploy}</maven.deploy.skip>
, deren Eigenschaften nicht vorhanden sind. In meinem Fall also nur das übergeordnete Element bereitstellen.quelle