In diesem speziellen Fall könnte das Urbild immer alle erforderlichen Module erstellen und die verschiedenen Aromen (Satz von Modulen) in Profile bewegen. Standardmäßig ist nur ein Profil aktiv, wie im Schritt archetype:generate
angegeben.
Als solcher, wenn ich den Satz von Modulen für Flavora haben wollen, ich werde das Urbild als
mvn archetype:generate -DarchetypeGroupId=.. -DflavorA=true
laufen Und das Urbild wird diese Variable auf den activeByDefault
Element des Flavora Profil re passieren - Definieren des Elements modules
für die von den Benutzern benötigten Module flavourA.
das gleiche getan für flavorB und flavorB (zum Beispiel) werden kann, die jeweils einen anderen Satz von Modulen zu definieren.
Ein Beispiel für einen solchen Aggregator/Eltern POM als Teil des Urbild wäre:
mit dem
-DflavorB=true
aufgerufen
<requiredProperties>
<requiredProperty key="flavourA">
<defaultValue>false</defaultValue>
</requiredProperty>
<requiredProperty key="flavourB">
<defaultValue>false</defaultValue>
</requiredProperty>
<requiredProperty key="flavourC">
<defaultValue>false</defaultValue>
</requiredProperty>
</requiredProperties>
Und das Urbild:
<profiles>
<profile>
<id>flavourA</id>
<activation>
<activeByDefault>${flavourA}</activeByDefault>
</activation>
<modules>
<module>profiled-module2</module>
<module>profiled-module3</module>
</modules>
</profile>
<profile>
<id>flavourB</id>
<activation>
<activeByDefault>${flavourB}</activeByDefault>
</activation>
<modules>
<module>profiled-module3</module>
</modules>
</profile>
<profile>
<id>flavourC</id>
<activation>
<activeByDefault>${flavourC}</activeByDefault>
</activation>
<modules>
<module>profiles-module1</module>
<module>profiled-module2</module>
<module>profiled-module3</module>
</modules>
</profile>
</profiles>
Die archetype-metadata.xml
Datei dann geben könnte Option würde dann eine Pom wie folgt erzeugen:
<profiles>
<profile>
<id>flavourA</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<modules>
<module>profiled-module2</module>
<module>profiled-module3</module>
</modules>
</profile>
<profile>
<id>flavourB</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>profiled-module3</module>
</modules>
</profile>
<profile>
<id>flavourC</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<modules>
<module>profiles-module1</module>
<module>profiled-module2</module>
<module>profiled-module3</module>
</modules>
</profile>
</profiles>
Ein solcher Ansatz hat folgende Vor- und Nachteile:
Vorteile
- Sie halten die gemeinsamen Module und das Urbild Wartung an einem zentralen Ort, während die Wahl von Aromen für den Benutzer die Abgangs Archetyp
- Benutzer des Archetyps könnten, wenn gewünscht und ohne Kosten, von einem Geschmack zum anderen wechseln nur Profile aktivieren/deaktivieren
- Der Ansatz verwendet Standard-Maven-Funktionen
Nachteile
- Jeder Urbild wird die ganze Reihe von Modulen erzeugen, auch wenn nicht alle von ihnen werden
- Wenn wirklich ein „Rauschen“ erforderlich, der Benutzer manuell die löschen könnte unerwünschte Module, aber dennoch wäre es eine manuelle Aktion
Außerdem oben auf t sein Wie oben beschrieben, können wir auch das Maven Clean Plugin in jedem Profil konfigurieren, um die Module zu löschen, die nicht von seinem Geschmack betroffen sind, so dass bei seinem ersten Build (a maven clean
) alle nicht benötigten Module gelöscht werden. Solch ein Ansatz würde das POM zwar mit inkonsistenten Profilen verlassen, aber es könnte auch in Betracht gezogen werden (nicht empfohlen).
Etwas wie:
<profile>
<id>flavourA</id>
<activation>
<activeByDefault>${flavorA}</activeByDefault>
</activation>
<modules>
<module>profiled-module2</module>
<module>profiled-module3</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<filesets>
<fileset>
<directory>${basedir}/profiled-module1</directory>
</fileset>
</filesets>
</configuration>
</plugin>
</plugins>
</build>
</profile>
In Bezug auf dieses Problem: https://issues.apache.org/jira/browse/ARCHETYPE-274 –
Siehe auch https://issues.apache.org/jira/browse/ARCHETYPE-494. – manouti