Mon projet comporte différents modules.
Lorsque j'ai essayé d'empaqueter en utilisant le pom.xml du module parent, il montre l'erreur - "Le pot d'emballage est un projet d'agrégateur non valide qui a besoin de pom comme emballage".
Que puis-je faire pour créer un fichier exécutable de l'application à partir de maven?
Pour faire court: si votre projet parent-agrégateur ne contient pas de code source (et c'est une bonne pratique), ajoutez simplement ceci à votre parent pom.xml:
<packaging>pom</packaging>
Si le projet parent contient du code source, je vous suggère fortement de:
commons
)commons
un module enfant de votre projet parentcommons
en tant que dépendance de tous les autres modules le nécessitant (peut-être tous)<packaging>pom</packaging>
dans le parent pom.xmlMaven requiert que le parent soit de packaging
pom
.
Vous pouvez faire en sorte qu'un projet pom
se comporte comme s'il s'agissait d'un projet jar
, en incluant un tas d'exécutions de plug-in et en les attachant à leur phase de cycle de vie suivante. Ce n'est pas une route heureuse. Au contraire, ce qui suit est .
D'un point de vue orienté objet, que voulez-vous? Vous avez un objet qui est composé d'un tas d'autres objets, non? En d'autres termes composition , par opposition à l'héritage.
Votre livraison finale est composée des autres projets (jar
), c'est-à-dire que les autres projets sont des dépendances du projet de livraison finale. Vous définirez les autres projets chacun comme dependency
afin que quiconque utilise votre livraison finale sache quelles dépendances (transitives) obtenir. Alternativement, la livraison finale jar
pourrait être présentée sous la forme "uber -jar
" et contenir ainsi toutes ses dépendances. Tout dépend vraiment de la façon dont la livraison finale doit être utilisée.
Dans le même temps, les deux aspects suivants peuvent (peuvent) exister:
parent
dans son POM.modules
qui doit être facilement construit en une seule fois. Les modules sont des projets référencés par l'utilisation de modules.module
. C'est généralement (je suppose> 99%) fait dans le projet parent, mais pas nécessairement. Vous pouvez également le mettre dans le projet de livraison final (sans affecter l'héritage, car c'est donc une bête différente), mais c'est atypique et je n'irais pas là-bas.