2010-09-24 3 views
0

Je commence tout juste à emballer mon projet d'application Web en tant que fichier WAR et je suis en cours d'exécution des différences entre la configuration de Tomcat vs Jetty vs JBoss vs Websphere, etc.Maven doit-il empaqueter différents WAR pour différents serveurs d'applications?

Dois-je essayer de configurer certains un super-intelligent tous dans un fichier WAR, ou devrais-je créer des profils Maven différents pour créer des WAR différents pour chaque serveur d'application?

Je ne pense pas que je devrais créer un module Maven séparé pour chaque WAR de serveur d'applications, devrais-je?

+0

Quel genre de différences avez-vous entre les serveurs d'applications? –

Répondre

1

Je n'essaie jamais d'expédier la configuration à l'intérieur d'une guerre. Le code ne devrait pas se soucier de l'environnement dans lequel il est expédié. Cela rend le déploiement plus complexe, mais le revers de la médaille est que vous pouvez facilement mettre en place une modification de configuration et être préoccupé par le déploiement accidentel de modifications de code dans un environnement.

Ce conseil s'applique doublement dans ce cas car il semble que vous avez le défi de différents environnements et différents conteneurs.

+1

Alors, comment aidez-vous les clients avec l'installation ... programme d'installation séparé, instructions? Je suis également intéressé à rendre le déploiement super facile pour les développeurs et les testeurs. – HDave

+0

Utilisez le fret pour faciliter le déploiement des développeurs. Je crois qu'il peut copier des artefacts de non-guerre. –

+0

J'ai toujours eu besoin d'écrire un script de déploiement séparé de toute façon. Ce qui a bien fonctionné dans le passé est de créer un gros fichier zip de données déployables - y compris app, config, db deltas, etc. Ensuite, il est facile de lancer un script car vous savez que vous avez toutes les dépendances. –

6

Je voudrais d'abord essayer de faire fonctionner cela avec une guerre super-intelligente. Je ne sais pas quels problèmes vous rencontrerez, exactement, mais jboss-web.xml et jetty-web.xmldevrait être capable de coexister dans un WEB-INF.

Si la réalité n'est pas si généreuse, j'utiliserais les classificateurs de fonctionnalités et de versions war overlays. structure et pom.xml s Filesystem seraient comme ceci:

myproject    (packaging: pom, version: 1.0.0-SNAPSHOT) 
+-- myproject-war  (packaging: war, version: 1.0.0-SNAPSHOT) 
+-- myproject-war-jboss (packaging: war, version: 1.0.0-jboss-SNAPSHOT) 
+-- myproject-war-jetty (packaging: war, version: 1.0.0-jetty-SNAPSHOT) 

Les deux guerres spécifiques à appserver contiennent uniquement les fichiers spécifiques appserver et importer la guerre comme simple superposition. Trois guerres différentes sont déployées dans votre dépôt Maven, ne différant par le numéro de version que par la partie classifieur (par exemple, myproject-war-1.0.0-jboss).

Idéalement, vous obtiendrez le versionnement mis en place dans pom.xml avec quelque chose comme <version>${project.parent.version}-jboss</version>, mais je ne suis pas entièrement sûr que cela peut être combiné avec le classificateur SNAPSHOT et fonctionne toujours.

+0

J'aime l'idée de superposition, je n'y avais pas pensé. Y a-t-il une raison pour laquelle vous n'utilisez pas les profils Maven pour inclure/exclure certains fichiers dans le fichier WAR? – HDave

+2

Je préfère l'approche "un répertoire, un pom.xml, un' mvn' d'exécution, un artefact de référentiel ". Je trouve que c'est plus prévisible, moins susceptible de rencontrer l'étrangeté Maven. – Barend

Questions connexes