maven jenkins parent-pom

maven - Cómo heredar la dependencia de un padre pom a un hijo pom



jenkins parent-pom (3)

Soy nuevo en el uso de Maven y Jenkins. Estoy tratando de heredar las dependencias de pom padre a pom hijo, muestra los siguientes errores:

[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

Aquí está mi padre 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> .......

Aquí está mi hijo 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> ......

Aquí es cómo traté de heredar la dependencia en el POM secundario del POM principal:

<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 pongo esas mismas dependencias en el POM hijo, funciona perfectamente. Hago clean install para instalar y deploy para implementar en nexus utilizando jenkins. Estoy usando maven-3.3.9. En Jenkins, he leído a los padres y a los niños en dos proyectos diferentes de git. Quiero heredar todas las dependencias y complementos del POM principal. ¿Es posible?


A continuación se muestra el ejemplo de cómo debe usar los padres y los poms secundarios.

El pom padre es el siguiente:

..... <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> <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 especifica una dependencia en la etiqueta dependencyManagement, simplemente significa que está haciendo este contenedor disponible para el pom hijo . NO descargaría realmente el tarro en este punto. El pom hijo tendrá que proporcionar el ID de grupo y el ID de artefacto de forma explícita para descargar y utilizar el archivo jar para compilar sus clases.

El niño pom será el siguiente:

..... <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> .......


De hecho, tienes 2 formas de lidiar con el problema.

  1. O bien factorice las dependencias en el pom principal bajo el nodo <dependencyManagement /> y en cada hijo que lo requiera, agregue la dependencia en el nodo <dependencies /> . Puede optar por no configurar la versión de la dependencia.
  2. O declara las dependencias en el pom principal en el nodo <dependencies /> , y cada niño se beneficiará de la dependencia.

Por ejemplo, si declara esto en el pom principal:

<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>

Entonces, slf4j-api será una dependencia para todos los niños. Sin embargo, tendrá que agregar una dependencia de slf4j-simple en el pom del niño, si lo requiere:

<dependencies> <dependency> <group>org.slf4j</group> <artifactId>slf4j-simple</artifactId> </dependency> </dependencies>

Para los complementos, funciona de la misma manera, pero con los <pluginManagement /> y <plugins /> . Toda la configuración puede ir en la definición del complemento del pom principal, y usted simplemente declara el complemento en la sección <build /> de su pom secundario.


Debería declarar las dependencias que desea heredar en una sección <dependencies> para lograr esto. <dependencyManagement> se usa para definiciones a las que se debe hacer referencia más adelante, siempre que sea necesario, dentro de las <dependencies> de un niño en particular para que sea efectivo.

ACTUALIZACIÓN : tenga cuidado al declarar las dependencias que heredará cada pom hijo. Muy rápidamente puede terminar teniendo dependencias que realmente no necesita simplemente porque están declaradas en el padre. Como mencionaron otros comentaristas, <dependencyManagement> puede ser una mejor opción, aunque no es lo que querías originalmente.