Maven: Combiner des projets web
-
20-09-2019 - |
Question
Je suit les projets Maven mis en place:
- PM-Core
- PM-Web (avec une dépendance à PM-Core)
J'ai envisagé plusieurs solutions de rechange sur la façon de soutenir ce avec Maven, mais je cherche toujours la solution parfaite.
La meilleure solution que je peux penser est de créer un projet Maven distinct pour chaque client (par exemple PM-CLIENT1, ...) qui ne contient que les fichiers de configuration spécifiques du client et des fichiers Java supplémentaires ou des années jsp, .... La prochaine étape serait de considérer le projet PM-Web et le projet client comme un seul projet Web, ce qui signifie: les ont combinés (emballés) dans 1 fichier de guerre avec les fichiers du projet client ayant priorité sur les fichiers du projet PM-Web <. / p>
Plus concret:. mvn package
en cours d'exécution sur PM-Client1 prendrait tout de PM-Web, ajouter / remplacer les fichiers de PM-Client1 et emballent alors cela en une seule guerre
La question est donc: comment y parvenir avec Maven
La solution
Oui, cela peut être fait en utilisant Superpositions. L'échantillon sur la page Web est exactement ce que vous parlez.
Pour la structure du projet, vous pourriez avoir quelque chose comme ceci:
. |-- PM-Core |-- PM-WebCommon (of type war, depends on core) |-- PM-Client1 (of type war, depends on webcommon) `-- PM-Client2 (of type war, depends on webcommon)
Et utiliser overlay dans PM-Client1 et PM-Client2 à "fusionner" les avec PM-webcommon et les guerres paquet pour chaque client.
UPDATE Je ne vais pas couvrir tous les détails, mais je pense que la déclaration de la dépendance de la guerre avec une portée de type runtime
est nécessaire lors de l'utilisation de recouvrement, c'est ainsi superposition ne fonctionne (en fait, l'ensemble chose superposition est une sorte de bidouille). Maintenant, pour résoudre votre problème éclipse, une solution serait de créer un JAR contenant les classes du projet PM-webcommon. Pour ce faire, utilisez le attachClasses
option paramètre et réglez-le sur true
. Cela dira Maven pour créer un PM-WebCommon-<version>-classes.jar
que vous serez alors en mesure de déclarer que la dépendance à PM-Client1 (avec une portée de provided
). Pour les détails, consultez la page Mwar-73 et Mwar-131 . Ceci est également discuté dans le FAQ de la guerre brancher. Notez que ce n'est pas une pratique recommandée, la bonne façon serait de déplacer les classes à un module séparé (ce qui est l'autre solution que je voulais mentionner).
UPDATE (201001018): J'ai essayé le paramètre de attachClasses
et il fonctionne avec la version 2.1-beta-1 du plug-in.
Autres conseils
Vous pouvez utiliser profils voir http://maven.apache.org/guides/ mini / guide renforcement des-différents-environments.html et utiliser classificateurs faire la distinction entre les objets de différents builds pour la même version.
Dans cette configuration, vous pouvez créer des modules supplémentaires en option pour chacun de vos clients des personnalisations spécifiques dans le cadre du projet parent à savoir
+ PM
++ PM-Core
++ PM-Web
++ PM-Client1
++ PM-Client2
Ou vous pourriez envisager d'utiliser utiliser le Maven plugin assemblage
Comparez aussi les réponses à la question différents fichiers WAR, ressources partagées .