10
votes

Comment étendre / personnaliser une guerre avec un autre projet

Nous avons le scénario suivant avec notre projet:

  • une application Web principale emballée en tant que Fichier de guerre (appelez le projet Core informatique).
  • la nécessité de "personnaliser" ou "étendre" l'application principale par client (appelez le projet client informatique). Cela comprend principalement Nouvelles définitions de haricots (nous utilisons Printemps), c'est-à-dire. remplacement du service implémentations dans le noyau.war avec implémentations spécifiques au client.
  • Nous voulons développer les projets de base et de la clientèle de manière indépendante
  • Lorsque le projet client est développé, nous devons être capables de l'exécuter / déboguer dans Eclipse (sur Tomcat) avec le projet de base comme une dépendance
  • Lorsque le projet client est construit, le fichier de guerre résultant "inclut" les projets de base et des clients. Donc, cette .war est la version spécifique au client de l'application

    Je recherche des suggestions quant à la meilleure façon de le faire en termes d'outils et de configuration de projet.

    Nous utilisons la fourmi actuellement, mais j'aimerais éviter d'être enterré dans plus de fourmi. Quelqu'un a-t-il fait cela avec Maven?

    J'ai vu beaucoup d'articles sur la manière de créer une application Web qui dépend d'une application Java, mais rien sur une application Web en fonction d'une autre application Web.

    merci!


0 commentaires

5 Réponses :


14
votes

sonne comme Maven superposition de guerre fait ce que vous voulez.


1 commentaires

Maximdim, j'ai essayé d'utiliser des superpositions de guerre, mais avec elle, je ne peux pas être déployé à chaud de modifications sur le projet parent. Lorsque je modifierai une classe ou un fichier statique (.js, .css) sur le projet parent, il n'est pas reflété sur l'application déployée. J'utilise Netbeans. Une idée de la façon de faire ce travail? Cela entrave gravement le développement.



0
votes

Ceci est un peu plus impliqué mais à un niveau élevé, nous le faisons comme ci-dessous. Nous avons la plate-forme principale de l'interface utilisateur de la plate-forme de base en plusieurs modules de guerre basées sur les fonctionnalités (Connexion UI, catalogue-MGMT-UI, etc.). Chacun de ces modules de base est personnalisable par l'équipe du client.

Nous fusionnerons tous ces modules pendant la construction de 1 module de guerre. Les règles de fusion sont basées sur le plugin de l'assemblage de Maven.


0 commentaires

0
votes

Vous commencez généralement à partir du code source Java. guerre s n'incluez pas le code source Java, juste les classes compilées sous web-inf / classes ou JAR S sous s -Inf / libs .

Ce que je ferais, c'est utiliser Maven et démarrer un nouveau projet WebApp vide avec celui-ci: http://maven.apache.org/guides/mini/guide-webapp.html

Après avoir eu la nouvelle structure de projet vide, copiez-le le code source Java à celui-ci ( SRC / MAIN / JAVA ) et remplissez la liste des dépendances dans pom.xml .

Une fois que vous avez terminé tout cela, vous pouvez utiliser MVN Clean Package pour créer une norme WAR fichier que vous pouvez déployer sur tomcat.


0 commentaires

0
votes

Vous voudrez peut-être envisager de concevoir votre application principale avec des fonctionnalités Pluggable en fonction des interfaces.

Par exemple, disons que votre application principale a un concept d'un objet utilisateur code> et doit fournir un support commun. Tâches basées sur les utilisateurs. Créez un Userstore code> interface; p> xxx pré>

Vous pouvez ensuite coder votre application principale (logique de connexion, logique d'enregistrement, etc.) sur cette interface. Vous voudrez peut-être fournir une implémentation par défaut de cette interface dans votre application principale, telle qu'un document de base de données code> qui serait effectivement une DAO. P>

Vous définissez ensuite le USERSTORE En tant que haricot de printemps et injectez-le si nécessaire; P>

<bean id="userStore" class="com.mycorp.auth.DatabaseUserStore">
    <constructor-arg ref="usersDataSource"/>
</bean>


0 commentaires

3
votes

Dans Eclipse, il y a un moyen de «natif» wtp pour le faire. Il utilise principalement des dossiers liés et un petit piratage en .Settings / org.eclipse.wst.commounent fichier. Vous pouvez lire l'article à ce sujet à http://www.informit.com /Articles/article.aspx?p=759232&eqnum=3 Le chapitre intitulé "Division d'un module Web en plusieurs projets". Le problème avec ceci est que le dossier lié doit être relatif à certains Variable de chemin peut être défini dans la fenêtre / Préférences / General / Espace de travail / Onglet Ressources liées. Sinon, la définition de dossiers liés (peut être trouvée dans le fichier .Project dans la racine de projet) contiendra un chemin de poste de travail. La variable du chemin devrait pratiquement être la racine de l'espace de travail. Cette solution fonctionne bien avec WTP, Déployer et tout le reste fonctionne comme si cela devrait.

La deuxième solution consiste à utiliser la fourmi pour elle. Oublie. Vous le regretterez profondément.

La troisième solution consiste à utiliser Maven pour cela. Vous pouvez oublier le confort de la publication WTP si vous ne faites pas quelques astuces. Utilisez des superpositions de guerre comme d'autres suggérées. Assurez-vous d'installer M2eclipse, M2eclipse Extras. Il y a un plugin d'extension publié récemment, qui peut vous aider. Décrit chez Ce blog . Je n'ai pas essayé, mais ça va bien. De toute façon, Maven n'a rien à voir avec des dossiers liés, alors je pense que même la première solution et cette superposition maven peut vivre ensemble si nécessaire.

Comme pour les constructions sans tête, vous pouvez utiliser DobleSeclipse pour la première solution. C'est mort (par moi) maintenant, mais travaille toujours :). Si vous utilisez la superposition Maven + Eclipse Stuff, les constructions sans tête sont recouvertes de Maven.


0 commentaires