Bonjour {^_^}, (desole pour les accents et autres, je suis sur un clavier QWERTY)
Tout d'abord le contexte. Je cree un framework qui execute des algorithmes ayant un objectif commun (trier des besoins selon differents criteres). Les algorithmes sont charges dynamiquement a l'execution, l'utilisateur pouvant alors choisir lequel il veut utiliser. Pour cela, chaque algorithme est developpe dans un projet a part, qui depend donc d'un projet decrivant les interfaces a utiliser (et differents outils communs). De maniere plus shematisee :
- Projet "algorithm" : regroupe les interfaces generiques et les outils communs aux differents algorithmes.
- Projet algo1 : implemente un algorithme particulier, qui etend les interfaces du projet "algorithm" (et donc en depend). Un JAR est cree une fois l'algo implemente.
- Projets algo2, algo3, ... : idem, chacun implemente un algorithme particulier.
- Projet "framework" : implemente le framework qui execute les algorithmes. Les JAR des algos disponibles sont places dans un dossier specifique, scanne par le framework. Il charge alors les algorithmes qui implementent les interfaces definies dans le projet "algorithm" (et donc il en depend aussi). Il convient de noter que ce projet ne depend pas des projets algo1, algo2, ... Il n'a aucune connaissance de ces projets, seuls les JARs dispo dans son dossier sont charges dynamiquement (et s'ils implementent les interfaces de "algorithms", alors ils sont reconnus et listes).
Voila en gros comment ca se passe. Pour gerer tout ca, j'utilise Maven via Eclipse. J'ai donc un pom parent qui regroupe tous mes projets (interfaces + algos + framework) et un pom pour chaque projet. Le pom parent definit chaque projet comme un de ses modules (j'ai retire les infos sensibles et change les noms, mais la structure est strictement la meme) :
Bien entendu, chaque projet voit son pom lie au parent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <modules> <module>framework</module> <module>algorithm</module> <module>algo1</module> <module>algo2</module> </modules>
Les projets framework et algoX definissent bien entendu leurs dependances aux interfaces :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <parent> <artifactId>parent</artifactId> <groupId>...</groupId> <version>...</version> </parent>
Notez qu'ils definissent aussi tous une dependance pour JUnit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <dependency> <groupId>...</groupId> <artifactId>algorithm</artifactId> <version>...</version> <scope>compile</scope> </dependency>
A part ca je n'ai rien de special qui me vient en tete. Voila pour illustrer le pom d'un algo :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency>
Et le pom du parent :
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 <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> <parent> <artifactId>parent</artifactId> <groupId>...</groupId> <version>...</version> </parent> <artifactId>algo1</artifactId> <name>...</name> <description>...</description> <inceptionYear>...</inceptionYear> <developers> <developer> <name>...</name> <email>...</email> </developer> </developers> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> <dependency> <groupId>...</groupId> <artifactId>algorithm</artifactId> <version>...</version> <scope>compile</scope> </dependency> </dependencies> </project>
Maintenant mon niveau. Je suis un debutant sous Maven : je m'y suis mis parce qu'un camarade a mavenise un de mes projets, et depuis je me contente de copier-coller les poms en changeant juste ce que j'ai besoin. Aussi je pense avoir bien compris le role de chaque element present dans ces poms, mais je n'ai aucune idee de ce que je peux mettre d'autre. J'apprends sur le tas.
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 <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>...</groupId> <artifactId>parent</artifactId> <version>...</version> <packaging>pom</packaging> <name>...</name> <description>...</description> <inceptionYear>...</inceptionYear> <developers> <developer> <name>...</name> <email>...</email> </developer> </developers> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <modules> <module>framework</module> <module>algorithm</module> <module>algo1</module> <module>algo2</module> </modules> </project>
Mon soucis est le suivant : j'aimerais que lorsque j'ai fini une release de mon projet, je puisse le deployer en compilant tout et en m'assurant qu'au final j'ai un framework complet, c'est a dire :
- un JAR executable du framework (qui contient les interfaces et outils du projet algorithm)
- un dossier contenant tous les JARs des algorithmes implementes (algo1.jar, algo2.jar, ...)
Je suis capable de le faire a la main sous Eclipse (exporter le projet du framework dans un JAR executable, exporter chaque projet algo dans un JAR que je place dans le dossier du framework) et ca marche. Ce que j'essaye de faire est d'automatiser ce processus via Maven.
Ma question est donc la suivante : comment automatiser ce processus de la maniere la plus propre que possible ? J'ai deja vu un sujet similaire mais je ne suis pas sur que ce soit le meme probleme : http://www.developpez.net/forums/d11...dances-projet/
Une question subsidiaire serait : auriez-vous un tutoriel pas-a-pas ET complet sur Maven ? J'ai vu plein de tutos sur le net, mais a chaque fois c'etait soit super simple mais on fait juste un projet sous Maven, on va pas beaucoup plus loin, soit bien detaille mais il faut deja maitriser maven pour savoir de quoi on parle, ce qui n'est pas mon cas (et c'est le feeling que m'a donne le sujet cite ci-dessus).









Répondre avec citation




Partager