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.