2009-12-10 5 views
4

J'ai un processus de construction qui crée une oreille d'une manière assez compliquée (plusieurs jarres d'EJB, quelques guerres, quelques sars (qui sont spécifiques à JBoss). ensemble est quelque peu complexe.Stratégies pour déployer une oreille éclatée

Quelle est la meilleure stratégie pour ne pas recréer la logique de création de la création de ejb dans ANT mais toujours être en mesure de déployer explosé au serveur d'application ou dans une oreille pour l'AQ et la production.

Bien que je suis préoccupé par JBoss, la question est vraiment pertinente pour tout serveur d'application qui prend en charge le déploiement de l'oreille éclatée, et est vraiment plus sur ANT, comment éviter deux cibles différentes qui ont recréé la logique de cr manger un fichier zip vs copier dans un répertoire.

+13

Sons douloureux :) – cletus

+7

Wow. Bonne chose, il y a des balises pour aider à donner un contexte à ces questions. Ce titre est incroyable! – Goyuix

+1

quiz: qu'est-ce qu'un script de vérification des classes et des propriétés empaquetées dans l'oreille sera appelé? 'chirurgie de l'oreille' :) – pmu

Répondre

5

J'ai trouvé que ce qui fonctionne le mieux pour nous, est de créer le contenu ZIP/EAR/WAR/JAR sous forme éclatée dans le système de fichiers, puis comme l'étape finale zip/ear/war/jar up dans un fichier.

Cela nous permet d'avoir des étapes de post-traitement qui ne connaissent que les fichiers et non les entrées de fichiers zip, ce qui est généralement beaucoup plus simple. Si vous travaillez avec un déploiement éclaté et un serveur qui récupère les fichiers modifiés dans le déploiement éclaté, vous pouvez simplement utiliser rsync pour mettre à jour uniquement les fichiers réellement modifiés dans le déploiement du serveur. Vous aurez alors le bâtiment dans une cible, et l'emballage dans un autre, ce qui rend facile à faire les deux.


réponse de Voir Alexander Pogrebnyak en ce qui concerne la façon de traiter en utilisant cette solution se manifeste.

+0

Le fait est que les tâches ANT Jar/War/Ear ont une manipulation spéciale pour les manifestes. Comment gérez-vous cela? – Yishai

+0

Vous créez manuellement le fichier Manifest.MF et dites à Ant d'utiliser ce fichier lors de l'exécution du fichier jar/war/ear. –

+0

Au fait, c'était alors. Nous avons depuis migré à Maven. –

3

Un fichier .ear est un fichier .zip. Pour déployer une version éclatée il suffit de décompresser le contenu dans un dossier nommé * .ear.

+0

Je m'en rends compte. J'essaye de réduire le temps impliqué. Je suppose que si l'oreille reste entre les builds ce n'est pas trop mal, mais ce serait génial d'éviter tout le voyage d'ajouter à un zip pour l'extraire. – Yishai

+0

Vous pouvez générer la construction dans une cible dépendante et puis ou en utilisant deux autres. Cela met la logique pour construire l'arbre dans un endroit et la logique pour le compresser ou le copier en dehors de ce processus. –

+0

Je préfère mordre la balle en ouvrant l'oreille pour m'assurer que les serveurs de production ont EXACTEMENT la même arborescence que celle que je suis en train de tester localement. À mon humble avis, l'assurance de la qualité devrait être déployée EXACTEMENT comme la production, donc si l'on obtient un dossier explosé. Vous vous couperez lorsque vous souffrez d'un bug (ou pire d'une panne) en production en raison d'un problème avec le fichier file.ear vs.oreille. –

4

Ceci est une réponse à votre commentaire sur le manifeste.

Vous devez utiliser la tâche <manifest> (here is the link) pour contrôler la création du manifeste.

Voici l'extrait de mon fichier de construction pour fournir le manifeste.

<copy toDir="${stage.dir}" flatten="true"> 
    <fileset dir="${resources.src.dir}"> 
    <include name="META-INF/MANIFEST.MF"/> 
    </fileset> 
</copy> 

<manifest 
    file="${stage.dir}/MANIFEST.MF" 
    mode="update" 
> 
    <attribute name="Built-By" value="${builder.name}" /> 
</manifest> 

<jar destfile="${project.jar.file}" 
    basedir="${classes.dir}" 
    manifest="${stage.dir}/MANIFEST.MF" 
    duplicate="fail" 
    whenmanifestonly="fail"  
/> 

attention à <manifest> tâche mode attribut. Vous voulez toujours le définir sur update, sinon la tâche <jar> sera toujours exécutée, car le manifeste sera toujours obsolète.

+0

Cool, merci! Très intéressant. – Yishai

Questions connexes