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 :

Fatjar-maven-plugin : ajouter également les classes de tests d'une librairie


Sujet :

Maven Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Par défaut Fatjar-maven-plugin : ajouter également les classes de tests d'une librairie
    Bonsoir,

    dans le pom de mon projet, je souhaite lui demander la génération de trois jars :
    - un jar classique avec les fichiers .class
    - un jar contenant les sources
    + un dernier jar (se nommant si possible ${pom.artifactId}-FAT-${pom.version}) contenant un manifest avec un MainClass, tous mes fichiers .class mais également, l'ensemble des fichiers présents dans mes dépendances maven (comme le propose fatjar-maven-plugin)
    Ce dernier jar ne sera pas déclaré en dépendance dans aucun autre pom mais l'application devra pouvoir se lancer en double-cliquant sur l'icône...

    A noter également, que mes dépendances référencent une librairie et les tests unitaires de cette librairie.

    Voici mes dépendances :
    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
    <dependencies>  
          <dependency>
              <groupId>mon.groupId</groupId>
              <artifactId>monArtifactId</artifactId>
              <version>0.1-SNAPSHOT</version>
              <type>jar</type>
          </dependency>
          <dependency>
              <groupId>mon.groupId</groupId>
              <artifactId>monArtifactId</artifactId>
              <version>0.1-SNAPSHOT</version>
              <type>test-jar</type>
              <optional>true</optional>
          </dependency>
     
          <!-- Librairies tierces -->
          <dependency>
             <groupId>org.swinglabs</groupId>
             <artifactId>swingx</artifactId>
             <version>0.9.4</version>
          </dependency>
          <dependency>
             <groupId>commons-lang</groupId>
             <artifactId>commons-lang</artifactId>
             <version>2.4</version>
          </dependency>
          <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
             <version>1.4</version>
          </dependency>
      </dependencies>

    Au niveau des plugins, j'ai déclaré :
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    <plugins>
    <!--
    On indique a maven une compilation avec JDK 1.6 (par defaut, il prend 1.3 !!!)
    -->
    <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-compiler-plugin</artifactId>
     
    	<configuration>
    		<source>1.6</source>
    		<target>1.6</target>
    	</configuration>
    </plugin>
     
    <!--
    On spécifie dans ce plugin, le répertoire des sources java et des tests
    -->
    <plugin>
    	<groupId>org.codehaus.mojo</groupId>
    	<artifactId>build-helper-maven-plugin</artifactId>
    	<version>1.1</version>
    	<executions>
    		<!-- Répertoire des sources java -->
    		<execution>
    			<id>add-source</id>
    			<phase>generate-sources</phase>
    			<goals>
    				<goal>add-source</goal>
    			</goals>
    			<configuration>
    				<sources>
    					<source>src/java</source>
    				</sources>
    			</configuration>
    		</execution>
    		<!-- Répertoire des tests java -->
    		<execution>
    			<id>add-test-source</id>
    			<phase>generate-sources</phase>
    			<goals>
    				<goal>add-test-source</goal>
    			</goals>
    			<configuration>
    				<sources>
    					<source>src/test</source>
    				</sources>
    			</configuration>
    		</execution>
    	</executions>
    </plugin>
     
    <!--
    On demande la création d'un jar avec les sources dans le repository local
    -->
    <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-source-plugin</artifactId>
    	<executions>
    		<execution>
    			<id>bind-sources</id>
    			<goals>
    				<goal>jar</goal>
    			</goals>
    		</execution>
    	</executions>
    </plugin>
     
    <!--  on demande la création d'un jar fat avec toutes les dépendances -->
    <plugin>
    	<groupId>com.anydoby</groupId>
    	<artifactId>fatjar-maven-plugin</artifactId>
    	<version>0.0.2</version>
    	<executions>
    		<execution>
    			<id>pre-jar</id>
    			<phase>package</phase>
    			<goals>
    				<goal>prepare-jars</goal>
    			</goals>
    		</execution>
    	</executions>    
    </plugin>
     
    <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-jar-plugin</artifactId>
    	<configuration>
    		<archive>
    			<manifest>
    					<mainClass>fr.monProjet.monArtifactId.monLanceur</mainClass>
    			</manifest>
    		</archive>
    	</configuration>
    	<executions>
        		<execution>
        			<id>monId</id>
        			<phase>package</phase>
        			<goals>
        				<goal>jar</goal>
        			</goals>
        			<configuration>
        				<classifier>FAT</classifier>
        			</configuration>
        		</execution>
    	</executions>
    </plugin>
    </plugins>

    Cette solution fonctionne presque ... il me créé bien 3 jars.
    Cependant, dans le jar FAT, il ne m'insère pas les classes de ma librairie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    «
          <dependency>
              <groupId>mon.groupId</groupId>
              <artifactId>monArtifactId</artifactId>
              <version>0.1-SNAPSHOT</version>
              <type>jar</type>
          </dependency> »
    ,

    alors qu'il ajoute bien les classes de tests de cette même librairie puisqu'elles font
    parties des dépendances :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    «
         <dependency>
              <groupId>mon.groupId</groupId>
              <artifactId>monArtifactId</artifactId>
              <version>0.1-SNAPSHOT</version>
              <type>test-jar</type>
              <optional>true</optional>
          </dependency> »
    .

    Si je mets en commentaires la dépendance vers le jar des tests unitaires de ma librairie, je retrouve bien les classes de la librairie dans le jar FAT construit par maven.

    Avez-vous une solution pour que je puisse avoir à la fois les classes de ma librairie et ses classes de tests unitaires dans le gros jar FAT ?

    Merci pour votre aide,
    F.

  2. #2
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Le résultat est un peu étrange... Peut-être est-ce dû à un problème sur le plugin FatJar ?

    Eventuellement, tu peux t'orienter vers le plugin shade, qui est censé faire la même chose, ou encore via des assemblies, où tu pourras inclure dans ton JAR final absolument ce que tu souhaites...
    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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Par défaut
    J'ai donc essayé de remplacer le plugin fatjar-maven-plugin par maven-shade-plugin. Je l'ai déclaré de la manière suivante :

    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
     
    <!-- On demande la création d'un gros JAR -->
    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.2.2</version>
            <executions>
    	          <execution>
    		            <phase>package</phase>
    		            <goals>
    		                      <goal>shade</goal>
    		            </goals>
    		            <configuration>
    			              <transformers>
    			                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    				                          <manifestEntries>
    				                    	            <Main-Class>maClasseMain</Main-Class>
    				                    	            <Build-Number>123</Build-Number>
    				                          </manifestEntries>
    			                        </transformer>
    		                      </transformers>
    		            </configuration>
    	            </execution>
              </executions>
    </plugin>
    Il créé bien un jar contenant toutes mes dépendances (y compris les dépendances de tests) mais ce jar se nomme ${pom.artifactId}-${pom.version}.jar et non ${pom.artifactId}-FAT-${pom.version}.jar

    Ensuite, il ne me créé pas le simple jar avec que les fichiers class de mon projet (pour qu'il puisse être utilisé dans une dépendance d'un autre projet)...

    Dans mon répertoire target, il créé bien un jar ${pom.artifactId}-${pom.version}-shade.jar mais il le copie sous ${pom.artifactId}-${pom.version}.jar dans le repo local. Pourquoi cela ?

    Avez-vous une idée comment faire cela ?

    Merci,
    F.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2010, 16h26
  2. Réponses: 2
    Dernier message: 11/07/2008, 15h12
  3. [Checkstyle] [Maven] activation du checkstyle report sur les classes de test
    Par cronoschris dans le forum Qualimétrie
    Réponses: 19
    Dernier message: 08/05/2008, 19h24
  4. [Debutant] generer les classes a partir d'une bdd
    Par Lafab dans le forum Persistance des données
    Réponses: 8
    Dernier message: 05/03/2008, 17h52
  5. Réponses: 3
    Dernier message: 05/12/2006, 13h18

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