IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Ou placer une classe utilitaire commune à plusieurs projets ?


Sujet :

Java

  1. #1
    Membre régulier

    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 124
    Points
    124
    Par défaut Ou placer une classe utilitaire commune à plusieurs projets ?
    J'ai créé une classe (et même un paquet complet) qui est utilisée dans plusieurs projets Java.

    Exemple : La méthode abracadabra dans la classe Utilitaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    package utilitaire;
    public class Utilitaire {
      public void abracadabra() {...}
    }
    J'ai sauvé cette classe sur mon disque sur dans :
    c:\java\commun\Utilitaire.class

    Avec Eclipse, je peux utiliser cette classe dans un nouveau projet.
    Pour cela, il faut que j'ouvre le dossier contenant le fichier "Utilitaire.class" dans l'explorateur de fichier Windows. Ensuite je glisse le fichier dans le projet d'Eclipse. Eclipse me demande si je veux copier ou lier le fichier, je réponds lier. De cette manière mon fichier reste dans c:\java\commun\Utilitaire.class et quand je le modifie ici, la modification est répercutée sur touts les projets qui utilisent cette classe en fichier lié.

    Avec InteliJ, il n'existe pas cette option. (Du moins je ne l'ai pas trouvé). Pour cette raison, j'utilise Eclipse.

    Mon problème c'est que quand je pousse sur git, mon projet c:\java\eclipse-workspace\projet.
    Sur git, le fichier lié n'est pas poussé.
    Si je veux alors pousser le projet sur git, il faut que je supprime le lien vers la classe Utilitaire dans mon projet, puis que je copie le fichier, cette fois en copie et pas en lien. Alors la classe est incluse dans le projet et peut être poussée sur Git.

    J'ai donc plusieurs questions :
    1) Est-ce qu'il est possible de lier des dossiers externes à un projet avec InteliJ (comme avec Eclipse) ?
    2) Comment pousser le projet complet sur Git en y incluant les fichiers liés ?
    3) Est-ce qu'il existe une autre façon de faire simple ?
    4) Est-ce qu'il existe une autre façon de faire plus compliquée (comme compiler un jar pour la classe utilitaire qui sera repris dans les projets par maeven ou en ajoutant une bibliothèque externe ?)
    5) Est-ce qu'avec linux je m'en sortirai mieux en utilisant les lien linux?

    J'espère avoir été assez clair, Merci pour vos idées si vous avez déjà rencontré ce problème.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    l'usage est de gérer ce problème par l'emploi de Maven ou Gradle.

    Ta classe en question ferait partie d'un projet qui est configuré en Maven/Gradle. Quand elle est prête, tu fais Maven install ou équivalent, ce qui crée un artefact jar utilisable comme dépendance et l'installe dans ton repo maven local.

    Ensuite tes autres projets doivent être configurés en Maven/Gradle aussi, et inclure cet artefact comme dépendance.

    Certes il ne sera toujours pas poussé dans les autres projets, et c'est mieux, car il ne faut pas dupliquer les classes. L'intérêt est que ça ne servirait à rien de le pousser dans les autres projets, puisqu'avec Maven/Gradle ils incluent ce jar automatiquement sans avoir besoin de faire quoi que ce soit.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 326
    Points : 439
    Points
    439
    Par défaut
    Bonjour,

    Comme l'explique thelvin, une solution classique est de passer par Gradle, Maven (ou autre outil similaire) qui va publier votre classe dans une librairie. Mais il faut penser à "publier" cette librairie à chaque fois que vous la changez et vous n'avez pas la facilité de modifier cette classe depuis n'importe quel projet et de voir les changements repoercutés automatiquement dans les autres projets.

    Je ne sais pas si IntelliJ offre des solutions pour "lier" un fichier. Mais si vous êtes sur un système "Unix" vous pouvez utiliser la commande ln pour avoir le même résultat que ce que vous avez actuellement.

    Une autre solution adoptée par certains est le monorepo qui consiste à n'avoir qu'un seul "projet" parent qui contient tous vos projets. Tout le monde travaille et pousse sur le même repository, c'est un avantage pour avoir du code à jour et eviter des différences dans les versions de librairies. Mais le "build" devient complexe car il ne faut pas toujours tout construire ni même tester.

    Enfin, il y à les sous modules git. Ils vous permettent en quelque sorte d'inclure un repository Git dans un autre. Mais ça n'est pas automatique, il faut penser à importer et mettre à jour ces "sous modules".


    Tout celà dépends du contexte. Ce sont par exemple des solutions bien trop lourdes si vous êtes seul. Dans ce cas, le plus simple reste le copier-coller. Il y existe certainement des outils pour automatiser la copie/synchronization entre tous vos projets.

  4. #4
    Membre régulier

    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 124
    Points
    124
    Par défaut
    Merci pour vos réponses.
    Je pense que je vais continuer avec les liens eclipse qui fonctionne très bien, et si je veux pousser vers le Git, alorsje réassemble le projet en copiant mes bibliothèques.

    C'est utile pour moi de pouvoir développer les classes communes à partir de n'importe quel projet. Ce que je cherche c'est à ne pas à avoir à recopier les modifications pour tous les projets.

    Dans le futur, quand le paquet commun n'aura plus besoin de modifications, alors je pourrai tenter de suivre le tutoriel youtube qui explique comment publier le paquet dans Open Source Projet Repository Hosting. ("How to Publish a Java Library to Maven Central" par Recursive). D'autres vidéos parlent de JFrog. Le tutoriel explique qu'il faut créer un compte Jira. Cela semble prendre du temps et être un peu compliqué.

    Dans tous les cas vos réponses m'aident à connaître les moyens Java officiels et utilisés pour ce cas de figure. Je viens de Delphi/Lazarus, et avec ces outils c'est plus simple puisque l'on peut y configurer les chemins de recherches des unités externes.

  5. #5
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 326
    Points : 439
    Points
    439
    Par défaut
    Je ne sais pas de quel tutoriel vous parlez mais il me semble érroné.

    La création d'un projet Maven n'est pas très compliquée. Et, une fois que vous avez crée votre projet, vous pouvez publier vos classes communes dans une librairie qui reste sur votre machine avec la commande mvn install. Cette commande va assembler la librairie et la copier ailleurs sur votre disque pour que tous vos autres projets y aient accès. Il n'est pas nécessaire de publier sur un repository public et encore moins de ce créer un compte Jira pour ça.

    Mais, le mieux est effectivement de continuer à travailler comme vous le faites si celà vous convient. Au moins vous connaissez les alternatives le jour ou cette solution sera limitative.

  6. #6
    Membre régulier

    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 124
    Points
    124
    Par défaut
    Voici la vidéo tutoriel que j'avais repéré :


    Il y a d'autres exemples utilisant JFrog, Celle qui me parait la moins obscure est celle ci :


    Je n'ai pas encore testé ni l'un ni l'autre.

    D'après ce que j'en ai compris, la première vidéo utilise un repository maven publique accessible depuis internet. La méthode avec JFrog semble permettre d'installer un repository maven en local. Par contre je n'ai pas encore repéré de tuto qui utilise mvn install. Le tout semble quand même compliqué.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est parce que mvn install c'est la base de la base, ça va avec l'utilisation la plus simpliste de Maven. Il faut un tutoriel d'utilisation de Maven pour débutant, pas pour faire une chose ou une autre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre régulier

    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 124
    Points
    124
    Par défaut
    J'ai trouvé un tutoriel qui explique maven :


    Je n'avais pas cette approche de maven, celle ci est très complète.

    Merci pour votre aide, je peux clore la discussion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Portlet] Récuperation du PortletContext dans une classe "utilitaire"
    Par Jaxofun dans le forum Portails
    Réponses: 2
    Dernier message: 18/05/2011, 16h28
  2. Communication entre une classe et un thread
    Par cs_ntd dans le forum C#
    Réponses: 2
    Dernier message: 24/10/2008, 10h49
  3. placer une méthode dans une classe
    Par totoche dans le forum UML
    Réponses: 8
    Dernier message: 29/05/2008, 17h04
  4. CComboBox dans une classe utilitaire
    Par BakaOnigiri dans le forum MFC
    Réponses: 3
    Dernier message: 29/12/2006, 18h55
  5. Créer une classe commune à +sieurs fiches
    Par rtg57 dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/05/2006, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo