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 :

Mon Jar n'inclue pas les dependances Maven


Sujet :

Maven Java

  1. #1
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut Mon Jar n'inclue pas les dependances Maven
    Bonjour à tous !

    Faisant mes premiers pas avec Maven, je trouve vraiment très sympas de passer 3h pour réaliser des choses qui en principe se font en 3 clicks

    Trève de moqueries...

    Je travaille sous Eclipse.
    J'ai créé un projet Maven (maven-archetype-quickstart)
    Mon projet fonctionne très bien sous Eclipse (toutes les dependences de mon pom.xml sont bien reconnus dans mes classes java....)
    J'arrive au stade où je souhaitera réaliser un Jar de mon application
    Click droit sur mon projet -> Run As -> Maven Build
    Dans "Goal", je lui met un truc du genre : clean install
    Puis -> Run

    Là il me fait un tout un tas de truc, me met : BUILD SUCCESFULLY, m'a bien généré un jar dans le répertoire "Target", mais ce jar ne fonctionne pas....
    En jetant un coup d'oeil à l'intérieur, je me suis rendu compte qu'il ne contenait pas les librairies définis dans les dépendances de mon pom.xml....

    Comment que c'est possible un truc comme ça ?
    Comment rendre mon jar opérationnel ??
    Je suis vraiment à court d'idée sur ce coup....
    Toutes les idées sont les bienvenues !

    Merci d'avance !

  2. #2
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Salut,

    jette un coup d'oeil au plugin shade...

  3. #3
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Il faut à mon avis paramètrer le MANIFEST pour qu'il inclue les librairies dans le classpath.
    Tu peux jeter un oeil ici, sur la configuration du plugin JAR.

    Sinon, il y a aussi la solution shade, qui consiste à créer un JAR contenant ton code ainsi que celui des dépendances. Du coup, plus de problèmes de dépendances (si tu connais les plugins Eclipse oneJar ou uberJar, ça devrait te parler).
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  4. #4
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    pfiiiiiiiiiiiiiiiiouuuuuuuuuuu
    4h pour générer un jar fonctionnel

    Y'avais un peu de l'histoire du manifest, mais il en fallait un peu plus....
    Shade ma donnée des résultats très interessant mais la solution final ne l'utilise pas....

    Pour info, ca peut servir à quelqu'un, voici mon pom.xml :
    Code : 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <?xml version="1.0" encoding="UTF-8"?>
    <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/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>MonProjet</groupId>
    	<artifactId>MonProjet</artifactId>
    	<packaging>jar</packaging>
    	<version>0.0.1</version>
    	<description></description>
    	<name>MonProjet</name>
    	<url>http://maven.apache.org</url>
     
    	<build>
    	    <plugins>
    	    	<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-dependency-plugin</artifactId>
    				<executions>
    					<execution>
    						<id>copy-dependencies</id>
    						<phase>package</phase>
    						<goals>
    							<goal>copy-dependencies</goal>
    						</goals>
    						<configuration>
    							<outputDirectory>${project.build.directory}/lib</outputDirectory>
    							<excludeGroupIds>org.eclipse,org.eclipse.osgi</excludeGroupIds>
    						</configuration>
    					</execution>
    				</executions>
    			</plugin>
     
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-jar-plugin</artifactId>
    				<configuration>
    					<archive>
    						<manifest>
    							<addClasspath>true</addClasspath>
    							<mainClass>mon.package.mainClass</mainClass>
    							<classpathPrefix>lib/</classpathPrefix>
    						</manifest>
    					</archive>
    				</configuration>
    			</plugin>
     
    			<plugin>
    	  			<groupId>org.apache.maven.plugins</groupId>
    	  			<artifactId>maven-compiler-plugin</artifactId>
    	  			<version>2.0.2</version>
    				<configuration>
    					<source>1.6</source>
    					<target>1.6</target>
    				</configuration>
    	  		</plugin>
     
    	  		<plugin>
    				<artifactId>maven-resources-plugin</artifactId>
    				<version>2.2</version>
    			</plugin>
     
    	    </plugins>
      	</build>
     
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.swinglabs</groupId>
    			<artifactId>swingx</artifactId>
    			<version>0.9</version>
    			<type>jar</type>
            	<scope>compile</scope>
    		</dependency>
    		...
    	</dependencies>
    </project>
    En tout cas merci pour la piste !!!!!

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je vais te décevoir, mais normalement c'est facile et rapide . Le plugin "assembly" de maven est capable de te créer un archive (zip, tar.gz ou jar) contenant ton jar, ses dépendances (éventuellement dans un sous répertoire lib/) et éventuellement d'autres fichiers additionnels (fichiers de config de base, par exemple ^ ^). Il peut aussi te créer un gros gras jar où tu trouvera tes classes ainsi que toutes les classes de tes dépendances extraites de leur jar respectif

    Si tu opte pour ton jar plus les autres jar dans un sous dossier, il faudra éventuellement ajouter le classpath comme tu le fais déjà.

    Ainsi, ce pom.xml fait tout ce que tu veux :p


    Code : 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    <?xml version="1.0" encoding="UTF-8"?>
    <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/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>MonProjet</groupId>
    	<artifactId>MonProjet</artifactId>
    	<packaging>jar</packaging>
    	<version>0.0.1</version>
    	<description></description>
    	<name>MonProjet</name>
    	<url>http://maven.apache.org</url>
     
    	<build>
    	    <plugins>
     
                 <plugin>
                  <artifactId>maven-assembly-plugin</artifactId>
                  <configuration>
                    <descriptors>
                      <descriptor>src/main/assembly/src.xml</descriptor>
                    </descriptors>
                  </configuration>
                 </plugin>
     
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-jar-plugin</artifactId>
    				<configuration>
    					<archive>
    						<manifest>
    							<addClasspath>true</addClasspath>
    							<mainClass>mon.package.mainClass</mainClass>
    							<classpathPrefix>lib/</classpathPrefix>
    						</manifest>
    					</archive>
    				</configuration>
    			</plugin>
     
    			<plugin>
    	  			<groupId>org.apache.maven.plugins</groupId>
    	  			<artifactId>maven-compiler-plugin</artifactId>
    	  			<version>2.0.2</version>
    				<configuration>
    					<source>1.6</source>
    					<target>1.6</target>
    				</configuration>
    	  		</plugin>
     
    	  		<plugin>
    				<artifactId>maven-resources-plugin</artifactId>
    				<version>2.2</version>
    			</plugin>
     
    	    </plugins>
      	</build>
     
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.swinglabs</groupId>
    			<artifactId>swingx</artifactId>
    			<version>0.9</version>
    			<type>jar</type>
            	<scope>compile</scope>
    		</dependency>
    		...
    	</dependencies>
    </project>
    Et le fichier src.xml ressemblerais à çà:
    Code : 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
    <assembly>
      <id>distribution</id>
      <formats>
        <format>zip</format>
      </formats>
      <dependencySets>
        <dependencySet>
          <outputDirectory>lib/</outputDirectory>
          <unpack>false</unpack>
          <scope>runtime</scope>
        </dependencySet>
      </dependencySets>
      <files>
        <file>
          <source>src/assemble/conf</source>
          <outputDirectory>/conf</outputDirectory>
          <filtered>true</filtered>
        </file>
      </files>
     
    </assembly>
    t'aura plus qu'à faire mvn assembly:assembly pour générer ton archive prete à être vendue :p

    Si tu peux te contenter d'un gros jar incluant tout:
    Citation Envoyé par site de maven
    Code : 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
    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
            <!-- NOTE: We don't need a groupId specification because the group is
                 org.apache.maven.plugins ...which is assumed by default.
             -->
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
            </configuration>
            [...]
    </project>

  6. #6
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Je vais te décevoir, mais normalement c'est facile et rapide ...
    Mouais...
    Comme je le disais au debut de mon poste, je suis totalement newbie avec Maven...
    Je veux bien croire que quand on a déjà fait quelques pom.xml ca devient facile et rapide... d'où l'intéret de Maven justement

    Mais quand on fait c'est premier pas, trouver les plugin qui répondent à nos besoins parmis les centaines qui existent, puis savoir les paramétrer, n'est quand meme pas une tache aisé au début....

    En tout cas merci pour le "assembly" je pense que je vais l'utiliser, c'est un très bon complément

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ben oui comme d'hab
    c'est facile (quand on connait ^^). Mes premiers pom étaient bourrés de script ant qui faisaient le meme boulot que d'autres plugins maven

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

Discussions similaires

  1. Mon appli n'aime pas les accents
    Par dd_garion dans le forum Bases de données
    Réponses: 14
    Dernier message: 05/09/2007, 10h23
  2. Réponses: 2
    Dernier message: 07/08/2007, 21h41
  3. mon jar ne lit pas les sons wav
    Par poulette3000 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 13/05/2007, 19h56
  4. [Tcl/Tk] Mon interface n'affiche pas les images
    Par randazar dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 21/11/2006, 16h48
  5. Mon compilo ne reconnait pas les UINT8
    Par baert dans le forum C++
    Réponses: 11
    Dernier message: 08/02/2006, 16h08

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