Maven: Comment utiliser la jetée: exécuter dans un projet Maven multi-module, sans avoir besoin d'installer

StackOverflow https://stackoverflow.com/questions/4371373

Question

Je suis nouveau à Maven. J'ai un à plusieurs modules Maven 2 projet qui a la structure suivante (quelque peu simplifiée):

Project (POM packaging)
  |
  +-- Module1 (JAR)
  |     |
  |     +-- src
  |          |
  |          +-- main
  |               |
  |               +-- java
  |               +-- resources
  |
  +-- Module2 (JAR)
  |      |
  |     ...
  |
  +-- Web Module (WAR)
         |
        ...

J'ai configuré le module Web pour inclure le plugin Maven Jetty . Cela fonctionne très bien pour la construction des objets de production. Pour le développement, j'ai découvert que je dois mvn install d'appel sur un module que je change, suivi par stoping jetée et appelant la jetée. Réexécuter
Il serait beaucoup plus productif s'il y avait un moyen pour le plug-in de choisir les modifications directement des répertoires cibles de chaque module. Selon la documentation du plugin jetée, il semble y avoir une telle fonctionnalité, mais il semble que cela s'applique au module WAR.
Encore plus important pour moi est de pouvoir apporter des modifications aux fichiers de ressources, sans la nécessité de la jetée redémarrer. En effet, la plupart des ressources sont des fichiers HTML modèle, et il est énormément plus productif de concevoir et de mettre à jour les modèles au cours du développement sans avoir besoin de redémarrer pour voir les changements.

Alors, est-il un moyen de définir le chemin du plugin jetée pour inclure les répertoires cibles / classes et ressources de chaque module JAR, au lieu des JARs réels dans le référentiel local?

Merci!
Yaniv

Était-ce utile?

La solution

Ceci est impossible avec un projet Maven multi-module. Une règle cardinale de projets Maven est que chaque projet devrait être en mesure de rester seul. Cela ne les empêche pas d'être construit ensemble, mais tout projet devrait pouvoir être construit par lui-même, tant que toutes ses dépendances sont satisfaites.

Dans ce cas, cela signifie que le projet WAR ne peut pas regarder les autres projets pour voir si elles ont besoin d'être mis à jour, le POM pour les autres projets sont la déclaration définitive de ce qui doit être fait pour construire l'artefact. Et une fois que l'artefact est construit, il est mis dans le référentiel local. Il n'y a pas d'association entre les fichiers source et l'artefact à ce moment-là, donc il n'y a aucun moyen de savoir quels sont les fichiers source déclencherait une recréation de l'artefact que la guerre dépend.

Autres conseils

Dans Eclipse, vous pouvez utiliser "Run Jetty" plugin pour y parvenir.
Dans la configuration Run IDEA, il y a une option possible 'objets de l'espace de travail', vérifier.

Si vous utilisez m2eclipse (plug-in Eclipse pour une intégration étroite de Maven au sein d'Eclipse), vous pouvez gérer votre jetée: goal exécuté dans le module Web et d'autres dépendances seront prises en compte à partir de votre espace de travail, même si elles sont pas du tout disponible dans votre dépôt local.

Il y a juste une option dans votre course pour dire Maven pour résoudre vos modules dans l'espace de travail lui-même (par défaut, il serait tout simplement aller chercher ce qui est déployé dans le référentiel local).

Malheureusement, je ne peux pas avoir le même comportement dans IDEA et je dois exécuter une installation avant de lancer la jetée. Courir sur le module Web

Sur la base de cette réponse: Les meilleures pratiques WRT. `Mvn install`, les projets multi-modules, et exécutant une sous-module une solution de contournement autour des restrictions horribles Mavens et les limites du réacteur est de définir le plug-in dans le pom parent avec sauter vrai, et puis réactivez dans le sous-module respectif en utilisant saut faux.

Je résolus en utilisant un maven lanceur et configuration Resolve objets de l'espace de travail ,  qui n'est pas cochée par défaut

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