Je cherche à builder un Jar executable.
En d'autres termes, un jar portable ; c'est à dire, qu'il intègre toutes les dépendances dans lui-même (les .class nécessaires).
Alors maven est un peu neuneu car ça marche pas en fait.
J'ai un exemple qu'on faisait cela avec le maven-assembly-plugin
Il suffit de mettre soit disant ds les plugins du 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
<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-assembly-plugin</artifactId>
				<version>2.2-beta-5</version>
				<configuration>
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
					<archive>
						<manifest>
							<mainClass>fr.intuitiv.tesseract.ocr.OCRMain</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>
Alors c'est vrai que je vois bien grossir mon .jar et qu'il inclut toutes les dépendances. D'ailleurs avec le goal :

Je lis bien les dépendances (transitives incluses par défaut) de mon projet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
[INFO] 
[INFO] The following files have been resolved:
[INFO]    commons-beanutils:commons-beanutils:jar:1.7.0:compile
[INFO]    commons-collections:commons-collections:jar:2.1:compile
[INFO]    commons-digester:commons-digester:jar:1.6:compile
[INFO]    commons-io:commons-io:jar:1.4:compile
[INFO]    commons-lang:commons-lang:jar:2.5:provided
[INFO]    commons-logging:commons-logging:jar:1.1.1:compile
[INFO]    commons-validator:commons-validator:jar:1.3.1:compile
[INFO]    dom4j:dom4j:jar:1.6.1:compile
[INFO]    log4j:log4j:jar:1.2.16:compile
[INFO]    xml-apis:xml-apis:jar:1.0.b2:compile
[INFO]
Et j'imagine que maven-assembly-plugin s'appuie sur cette liste pour builder mon Jar Runnable.
Mais cette liste est incomplète. Il s'agit d'au niveau de dom4j. Dans la classe DocumentFactory, on lit un import

Code : Sélectionner tout - Visualiser dans une fenêtre à part
import org.jaxen.VariableContext;
Cet import est présent dans la librairie de jaxen.jar or cette dépendance n'est pas cité par Maven...c'est grave ça, les dépendances transitives ne marche pas avec mon dom4j pourtant j'ai mis la dep comme il le fallait dans mon pom.xml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>
comme cité par le descripteur dans http://mvnrepository.com.
Je me suis aperçu de cette erreur de build (manque la dep de jaxen) lorsque j'ai executé mon jar : la JaxenEception a été lancée et j'ai eu NoClassDefFound.
Comment puis-je alors construire mon jar executable ?

Merci