Je suis nouveau dans l'utilisation de Maven et de Jenkins. J'essaie d'hériter des dépendances de pom parent à pom enfant, il affiche les erreurs suivantes:
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/XMLConverters.Java:[10,26] package com.rpmtec.current does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/XMLConverters.Java:[11,26] package com.rpmtec.current does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/XMLConverters.Java:[15,38] cannot find symbol
symbol: class AbstractRequestMessageData_Type
location: class com.td.inv.wss.util.XMLConverters
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/XMLConverters.Java:[26,23] cannot find symbol
symbol: class AbstractResponseMessageData_Type
location: class com.td.inv.wss.util.XMLConverters
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/UsTermRateItemComparator.Java:[5,42] package com.rpmtec.current.UsTermRate_Type does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/UsTermRateItemComparator.Java:[7,61] cannot find symbol
symbol: class UsTermRateItems
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/UsTermRateItemComparator.Java:[9,28] cannot find symbol
symbol: class UsTermRateItems
location: class com.td.inv.wss.util.UsTermRateItemComparator
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/UsTermRateItemComparator.Java:[9,48] cannot find symbol
symbol: class UsTermRateItems
location: class com.td.inv.wss.util.UsTermRateItemComparator
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[9,40] package com.fasterxml.jackson.annotation does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[10,26] package com.rpmtec.current does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[11,26] package com.rpmtec.current does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[12,26] package com.rpmtec.current does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[13,26] package com.rpmtec.current does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[14,42] package com.rpmtec.current.UsTermRate_Type does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[19,2] cannot find symbol
symbol: class JsonIgnoreProperties
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[69,22] cannot find symbol
symbol: class ORCA_GETTERMHOLDINGRS_Type
location: class com.td.inv.model.COIRQ
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[69,66] cannot find symbol
symbol: class RPM_GETPLANACCOUNTOVERVIEWRS_Type
location: class com.td.inv.model.COIRQ
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/model/COIRQ.Java:[70,25] cannot find symbol
symbol: class ORCA_GETTERMINSTRUCTIONRS_Type
location: class com.td.inv.model.COIRQ
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/RPMInvoker.Java:[5,26] package javax.ws.rs.client does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/RPMInvoker.Java:[6,26] package javax.ws.rs.client does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/RPMInvoker.Java:[7,26] package javax.ws.rs.client does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/RPMInvoker.Java:[8,26] package javax.ws.rs.client does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/RPMInvoker.Java:[9,24] package javax.ws.rs.core does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/RPMInvoker.Java:[15,26] package com.rpmtec.current does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/RPMInvoker.Java:[16,26] package com.rpmtec.current does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/RPMInvoker.Java:[23,57] cannot find symbol
symbol: class AbstractRequestMessageData_Type
location: class com.td.inv.wss.util.RPMInvoker
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/util/RPMInvoker.Java:[24,41] cannot find symbol
symbol: class AbstractResponseMessageData_Type
location: class com.td.inv.wss.util.RPMInvoker
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/application/InvestmentAPI.Java:[4,19] package javax.ws.rs does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/application/InvestmentAPI.Java:[5,24] package javax.ws.rs.core does not exist
[ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/Java/com/td/inv/wss/application/InvestmentAPI.Java:[9,36] cannot find symbol
symbol: class Application
Voici mon parent POM:
.....
<modelVersion>4.0.0</modelVersion>
<groupId>group1</groupId>
<artifactId>group1-artifact</artifactId>
<version>1.0.1</version>
<packaging>pom</packaging>
<modules>
<module>child1</module>
</modules>
.......
Voici mon enfant POM:
.....
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>group1</groupId>
<artifactId>group1-artifact</artifactId>
<version>1.0.1</version>
<relativePath>(full url.....)/jenkins-parent-pom//pom.xml</relativePath>
</parent>
<groupId>group1</groupId>
<artifactId>child1</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
......
Voici comment j'ai essayé d'hériter la dépendance dans POM enfant du parent POM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>group1</groupId>
<artifactId>group1-artifact</artifactId>
<version>1.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Si je mets ces mêmes dépendances dans l'enfant POM, cela fonctionne parfaitement. Je fais clean install
pour l'installation et deploy
pour le déploiement dans Nexus à l'aide de Jenkins. J'utilise maven-3.3.9. Dans Jenkins, j'ai lu les poms parents et enfants de deux projets Maven différents de git. Je veux hériter de toutes les dépendances et plugins de POM parent. C'est possible?
Pour ce faire, vous devez déclarer les dépendances dont vous souhaitez hériter dans une section <dependencies>
. <dependencyManagement>
Est utilisé pour les définitions qui doivent être référencées ultérieurement, le cas échéant, dans le <dependencies>
D'un enfant particulier pour devenir effectives.
UPDATE : Soyez prudent lorsque vous déclarez des dépendances dont chaque pom enfant héritera. Très rapidement, vous pouvez vous retrouver avec des dépendances dont vous n'avez pas vraiment besoin simplement parce qu'elles sont déclarées dans le parent. Comme mentionné par d'autres commentateurs, <dependencyManagement>
Peut être un meilleur choix, bien que ce ne soit pas ce que vous vouliez à l'origine.
En fait, vous avez 2 façons de régler le problème.
<dependencyManagement />
noeud et dans chaque enfant qui en a besoin, ajoutez la dépendance dans le fichier <dependencies />
noeud. Vous pouvez choisir de ne pas définir la version de la dépendance.<dependencies />
noeud, et chaque enfant bénéficiera de la dépendance.Donc, par exemple, si vous déclarez ceci dans le pom parent:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</dependencyManagement>
Ensuite slf4j-api
sera une dépendance pour tous les enfants. Cependant, vous devrez ajouter une dépendance à slf4j-simple
dans le pom de l'enfant, devrait-il en avoir besoin:
<dependencies>
<dependency>
<group>org.slf4j</group>
<artifactId>slf4j-simple</artifactId>
</dependency>
</dependencies>
Pour les plugins, ça marche pareil, mais avec le <pluginManagement />
et <plugins />
nœuds. Toute configuration peut aller dans la définition du plugin par le pom parent, et vous déclarez simplement le plugin dans le <build />
section de votre enfant pom.
Vous trouverez ci-dessous un exemple d'utilisation des poms parent et enfant.
Le parent pom est comme suit:
.....
<modelVersion>4.0.0</modelVersion>
<groupId>group1</groupId>
<artifactId>group1-artifact</artifactId>
<version>1.0.1</version>
<packaging>pom</packaging>
<modules>
<module>child1</module>
// add more childs here
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.abc</groupId>
<artifactId>xyz</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>
.......
Si vous spécifiez une dépendance dans la balise dependencyManagement
, cela signifie simplement que vous rendez ce fichier jar disponible pour le pom enfant. Ce serait PAS effectivement télécharger le pot à ce stade. Le pom enfant devra fournir le groupId
et le artifactId
explicitement pour télécharger et utiliser le fichier jar pour compiler ses classes. Remarque: vous n'avez pas à inclure la version de la dépendance dans les poms de l'enfant.
Le pom de l'enfant sera comme suit:
.....
<modelVersion>4.0.0</modelVersion>
<parent> // this is how you will inherit from parent pom
<groupId>group1</groupId>
<artifactId>group1-artifact</artifactId>
<version>1.0.1</version>
</parent>
<groupId>child1</groupId>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>runtime</scope>
// no version needed as it would inherit from the parent pom
</dependency>
<dependency>
<groupId>org.abc</groupId>
<artifactId>xyz</artifactId>
// no version needed as it would inherit from the parent pom
</dependency>
</dependencies>
.......
C'est une bonne pratique de mettre des dépendances communes à tous les enfants dans la balise dependencyManagement
du pom parent. De cette façon, vous pouvez gérer les versions de ces dépendances à partir d’un seul endroit.