Question

Je suit les projets Maven mis en place:

  • PM-Core
  • PM-Web (avec une dépendance à PM-Core)
Maintenant, ce projet est utilisé pour plusieurs clients, mais pour chaque client il y a quelques petites différences. La plupart des différences dans les fichiers de configuration, mais certains clients ont aussi besoin de fichiers java supplémentaires (qui ne peuvent pas être installés pour les autres clients)

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

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top