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

Maven Java Discussion :

Inclure dépendance Maven dans le jar final


Sujet :

Maven Java

  1. #1
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut Inclure dépendance Maven dans le jar final
    Bonjour,

    J'ai un petit soucis de compréhension concernant l'utilisation de Maven. En effet, j'aimerais que mes dépendances soient incluses dans mon Jar final qui est généré quand je fais (avec eclipse) : "maven install"

    Je commence seulement à utiliser Maven car seulement me semble plus pratique pour gérer justement ces problèmes de dépendances mais apparemment c'est pas si simple.

    J'ai en dépendance : junit et commons-io comme nous pouvons le voir dans mon pom.xml :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>fr.akrogames.duus</groupId>
      <artifactId>duus</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>Duus</name>
      <dependencies>
      	<dependency>
      		<groupId>junit</groupId>
      		<artifactId>junit</artifactId>
      		<version>4.11</version>
      	</dependency>
      	<dependency>
      		<groupId>commons-io</groupId>
      		<artifactId>commons-io</artifactId>
      		<version>2.4</version>
      	</dependency>
      </dependencies>
    </project>

    J'ai cherché longuement sur le Net la manière dont je pourrais inclure mes dépendances et il est apparu, je crois, qu'il fallait utiliser une option jar-with-dependencies d'un plugin maven-assembly-plugin enfin je crois... C'est ce que j'ai compris.

    Mais du coup, en utilisant eclipse, je trouve hyper étrange qu'il n'y est pas une option dans l'interface graphique du pom.xml pour ajouter ce genre de chose. Concrètement comment je peux faire ? Je suis perdu.

    En vous remerciant par avance.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    Bonjour,

    En théorie, un Jar n'est pas fait pour avoir d'autre jar à l'intérieur. Normalement, quand on lance le programme principal on lui précise la liste des dépendances. (notion de "classpath"). Ces librairies se trouvent en dehors du jar principal.

    Par contre il existe d'autres méthodes de packaging pour avoir un livrable unique comme par exemple "FatJar" ou "jar-with-dependencies" du plugin "assembly". Tu peux aussi packager ton programme en war. Ca va dépendre de tes besoins.

    Sinon, une remarque en passant, la librairie jUnit devrait être déclarée avec le "scope" "test" et ne devrait pas être dans le programme à livrer...

    Mathieu

  3. #3
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Voila un exemple de ce que tu peux rajouter dans ton pom (dans la partie project) :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <build>
    <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>fr.nom.de.package.MainClass</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    </plugins>
    </build>

    De cette façon le deuxieme jar (celui incluant les dépendances) sera généré par maven pendant la phase de package, et sera donc disponible également au moment de la phase install.
    Tu auras les deux jars, celui que tu as actuellement (avec uniquement les classes que tu as écrites) et le deuxieme incluant les dépendances.

  4. #4
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Ceci dit, comme mentionné par Influenza, pour ma part, je ne fais jamais de jar-with-dependency et j'utilise habituellement un package zip avec un systeme de bootstrap pour charger les classes des autres jars nécessaire (typiquement classworlds : http://classworlds.codehaus.org/

  5. #5
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut
    Bonjour Influenza et Denis,

    J'ai ajouter le code de denis et cela fonctionne très bien. En effet, il est vrai que ce n'est pas très correcte d'inclure les dépendances dans le Jar final. Seulement, je développe une API et j'aimerais que mes utilisateurs puisse utiliser directement mon Jar sans télécharger je ne sais combien de dépendances que j'utilise.

    Je prend note de vos remarques et je vous remercie.

    Bonne journée

  6. #6
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Je suppose que l'appli utilisant ton API va elle aussi avoir des dépendances... comment vont tes utilisateurs gérer les conflits avec ces dépendances ?

  7. #7
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut
    Bonjour philippe,

    Pourquoi il y aurait des conflits ? Pour ma part, j'ai cette philsophie :

    - Au pire l'utilisateur ajoutera de nouveau une des dépendances que j'utilise.
    - Au mieux, il s'embêtera à ajouter et chercher sur le web les dépendances de mon API.

    C'est un choix, je n'ai pas envie qu'il se complique la vie sur le web alors pour faciliter les choses j'inclus tout dans mon jar.

    Ce qui signifie que mon Jar est compatible qu'avec java 7 et pas forcément java x par exemple. Mais c'est comme toute les applications au final.

  8. #8
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Pourquoi des conflits ? Tout simplement parceque les consommateurs de tes services pourraient (vouloir) utiliser une autre version de tes librairies tierces soit à la compil soit à l'exécution...

    Maven n'est pas qu'un outil de build... il permet aussi de gérer toutes les dépendance nécessaire de ton application ! Dans un build maven, tes utilisateurs ne pourront pas accéder à ton arborescence de dépendance qui sera masqué dans ton jar...

    En dehors de maven:
    - tu imposes des versions spécifiques des librairies tierces ! Pas cool
    - es-tu sûr d'avoir toutes les autorisations requises pour la distribution de ton API ? Vas-tu mettre des liens sur l'ensemble des licences que tu vas distribuer ?

    Bref, pour l'utilisateurs de ton API, tu apportes bien plus de problèmes que de solutions...

    a+
    Philippe

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

Discussions similaires

  1. Inclure dépendances Maven dans /lib
    Par bender86 dans le forum Maven
    Réponses: 12
    Dernier message: 08/06/2012, 07h10
  2. inclure des fichiers dans un .jar
    Par cysboy dans le forum Multimédia
    Réponses: 3
    Dernier message: 11/09/2006, 13h56
  3. Réponses: 5
    Dernier message: 11/04/2006, 16h39
  4. Inclure une DLL dans le .exe final?? possible?
    Par xavmax dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2005, 17h00
  5. [JAR][DLL][path] inclure des DLLs dans un jar
    Par blaz dans le forum Général Java
    Réponses: 5
    Dernier message: 28/07/2005, 12h29

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