2011-03-09 1 views
0

J'étend une application java existante, avec à la fois des modules Java purs et une guerre. Pour la guerre, j'utilise la méthode maven-war-overlay, qui inclut automatiquement mes propres fichiers d'extension sur les fichiers existants s'ils portent le même nom.meilleure façon d'étendre un projet java/maven existant

Maintenant, pour le module Java, je pensais que je pouvais étendre cela séparément, mais quelle est la meilleure façon? J'ai créé un nouveau projet de module java et inclus le jar de projet d'origine en tant que dépendance. Y at-il un moyen de modifier les propriétés/méthodes existantes dans ce pot sans créer de sous-classes? si je sous-classe, la classe existante ne sera pas au courant ...

Je pourrais exclure les fichiers du premier projet, mais cela va devenir un peu lourd, il y a beaucoup de fichiers qui ont besoin de petits changements (différentes annotations d'hibernation par exemple).

Quelle est la meilleure façon de laisser le code source original tout seul, mais de faire les changements dont j'ai besoin?

Répondre

0

Techniquement, vous pouvez ouvrir le contenu du fichier JAR d'origine, compiler de nouvelles sources et assembler un nouveau fichier JAR en remplaçant les anciennes sources par les nouvelles. Cependant, ce serait très mauvaise pratique et très sujettes aux erreurs, aussi. Vous risquez de perdre beaucoup de temps et de vous retrouver avec un désordre de projet.

Il est préférable de modifier les classes du projet d'origine pour permettre le remplacement des implémentations des classes. Avoir un conteneur IOC dans le projet pourrait faciliter ce processus. Vous pouvez le faire sans le conteneur, aussi, comme si:

class WantToOverride { ... } 

class UserOfWantToOverride { 
    WantToOverride wantToOverride; 

    public void setWantToOverride(WantToOverride wantToOverride) { 
    this.wantToOverride= wantToOverride; 
    } 
} 

Maintenant, lors de l'initialisation de votre projet, appelez

userOfWantToOverride.setWantToOverride(new OverridingClass(...)) 

, où votre classe

class OverridingClass extends WantToOverride { ... } 

Vous pouvez également hériter Hibernate classes, mais vous devez prendre soin de Hibernate Inheritance

+0

le projet utilise le printemps, pourriez-vous p Oignez-moi dans la bonne direction de la façon dont j'utiliserais les fonctionnalités de l'ioc? ce processus serait plutôt fastidieux pour tous les fichiers qui nécessitent de petites corrections. J'ai accès au code source, pas seulement au pot, si cela change quelque chose- – chrismarx

+0

@chrismarx Il est difficile d'obtenir une recette générale mais peut-être quelque chose comme ça dans applicationContext.xml: aussi, si vous parlez de petits correctifs (comme dans les corrections de bugs), pourquoi ne pas réparer les fichiers originaux? –

+0

ouais certains changements sont des bogues, d'autres sont dus au fait que je change de base de données pour le projet, et bien qu'ils se soient efforcés de rendre cela facile (en utilisant hibernate par exemple), il y a encore des endroits qui nécessitent des modifications . Je pense que ma stratégie va être d'exclure les classes que je modifie et d'insérer les miennes. pas aussi mauvais que de changer le code source (puisque cela va changer, un désordre comme vous l'avez mentionné) mais pas tout à fait aussi élégant – chrismarx

Questions connexes