Comment puis-je configurer maven sous-projets avec les inter-dépendances?
Je vais avoir un moment difficile de la configuration d'un ensemble de projets maven avec les interdépendances entre eux.
Voici mon cas simplifié:
pom.xml -- parent pom
\base\
pom.xml
src\main\java\Base.java -- this is just a simple class
\derived\
pom.xml
src\main\java\Derived.java -- this is a simple class that needs Base class to compile successfully, and has a main function
Mes objectifs sont:
- être en mesure de compiler, sur ma machine, tous les projets:
- c'est à dire
mnv clean compile
est couronnée de succès dans \
- c'est à dire
- être en mesure de compiler, sur ma machine, un seul projet:
- c'est à dire
mnv clean compile
est couronnée de succès dans \base\ et \dérivée de\ (même si cela peut ne pas fonctionner par la conception: Inter les Dépendances d'un Projet avec Maven)[edit: trouvé la réponse pour celle-ci: la base doit être publié localement avant de dérivés dans compilé: c'est à dire dans \base, ne
mvn clean compile install
au lieu de faire juste fairemvn clean compile
. Une fois cela fait, fairemvn clean compile
dans \dérivés fonctionne très bien. Pourtant, il serait bien de le faire sans toucher à l'état global, c'est à dire sans avoir à installer de base -- donc, si quelqu'un connait un moyen d'y parvenir, veuillez l'ajouter comme une réponse]
- c'est à dire
- être en mesure d'exécuter dérivés projet sur ma machine (mvn exec:exécuter ou équivalent) directement à partir de l'arbre source:
- c'est à dire
mvn exec:run
dans \dérivé\ compiler (si nécessaire) et d'exécuter la derived.jar
- c'est à dire
- le "composant partagé" cas d'utilisation: pousser la base de l'artefact à l'espace de stockage partagé, où d'autres personnes peuvent consommer comme une dépendance maven (c'est à dire moment de la compilation de la dépendance):
- c'est à dire
mvn clean compile ???
va le pousser à l'espace de stockage partagé spécifié dans ~/.m2/config.xml
- c'est à dire
- le "répertoire de l'image" cas d'utilisation: pousser la dérivée de l'artefact et son depedencies à un répertoire local, où il peut être exécuté par l'intermédiaire de "java-jar ..." ou il peut exposée comme un serveur ftp/http partager pour que d'autres personnes l'obtenir. I. e., l'utilisation des cas comme ceux-ci:
mvn clean compile ???
va pousser derived.jar et les dépendances (comme base.jar) dans ~/.m2/maven.repo/.../dérivés ou l'équivalent, et puis je peux cd ~/.m2/maven.repo/.../dérivés et exécuterjava -jar derived.jar
pour l'exécuter.mvn clean compile ???
va pousser base.jar dans ~/.m2/maven.repo/.../de base (ou derived.jar à son correspondant dir), qui est déjà exposé en téléchargement via le web ou un serveur ftp.
Comment dois-je faire les objectifs ci-dessus?
Voici la section pertinente du parent pom:
...
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>parentpom</name>
<modules>
<module>base</module>
<module>derived</module>
</modules>
...
Voici la section pertinente de la base pom.xml:
...
<parent>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.base</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>base</name>
...
Voici la section pertinente de dérivés pom.xml:
...
<parent>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.derived</groupId>
<artifactId>derived</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>derived</name>
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
...
Je vous remercie d'avance pour votre aide.
La raison principale pour (1) c'était une appellation d'incohérence dans mon maven configuration: au lieu d'utiliser partout FooColorBlack, j'ai parfois repris les pièces à FooBlackColor (exemple, pas de vrais noms).
Voici un exemple de projet explique: maven.apache.org/guides/mini/guide-multiple-modules.html
OriginalL'auteur daniel | 2012-08-31
Vous devez vous connecter pour publier un commentaire.
Votre parent pom semble bon, mais votre module/dérivés de pdm n'est pas le cas: Il y a plusieurs questions qui vont produire certains des problèmes etc.
Vous êtes d'abord à l'aide de différents groupId pour la dérivée/module de base. Si vous avez un multi-module construire vous ne devriez pas faire cela. En outre, la version de la dérivée/base est hérité par la mère et ne devraient pas être mises explicite ce qui signifie que vous devriez avoir quelque chose comme ce qui suit:
GroupId est généralement héréditaires. Mais parfois, vous avez un plus grand nombre de modules qui peuvent être des sous-modules de sous-modules qui résultats dans une structure comme ceci:
Dans de Tels cas, la mod1 lui-même est une pom emballage module:
mod1:
mod11:
Si vous avez besoin de faire une dépendance entre les modules de la solution est:
De compiler l'ensemble du projet avec tous les sous-modules dans un juste aller au dossier parent et:
mvn clean package
compiler etc. Si vous voulez compiler un seul projet, vous pouvez le faire par l' (du parent):
qui fonctionne uniquement si vous avez installé l'ensemble du projet une fois avant. Une autre solution est:
Pour faire les artefacts acessible pour d'autres, la solution la plus simple est d'installer un gestionnaire de référentiel et à faire:
mvn deploy
Tous les autres peuvent l'utiliser et de l'artefact comme un INSTANTANÉ de la dépendance.
Merci pour la confirmation de cette partie
<version>${project.version}</version>
OriginalL'auteur