jenkins 如何从父POM继承依赖关系到子POM

guykilcj  于 2023-08-03  发布在  Jenkins
关注(0)|答案(6)|浏览(278)

我是新的使用maven和Jenkins。我试图从父pom继承依赖项到子pom,它显示以下错误:

  1. [ERROR] COMPILATION ERROR :
  2. [INFO] -------------------------------------------------------------
  3. [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
  4. [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
  5. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[15,38] cannot find symbol
  6. symbol: class AbstractRequestMessageData_Type
  7. location: class com.td.inv.wss.util.XMLConverters
  8. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/XMLConverters.java:[26,23] cannot find symbol
  9. symbol: class AbstractResponseMessageData_Type
  10. location: class com.td.inv.wss.util.XMLConverters
  11. [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
  12. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[7,61] cannot find symbol
  13. symbol: class UsTermRateItems
  14. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[9,28] cannot find symbol
  15. symbol: class UsTermRateItems
  16. location: class com.td.inv.wss.util.UsTermRateItemComparator
  17. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/UsTermRateItemComparator.java:[9,48] cannot find symbol
  18. symbol: class UsTermRateItems
  19. location: class com.td.inv.wss.util.UsTermRateItemComparator
  20. [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
  21. [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
  22. [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
  23. [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
  24. [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
  25. [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
  26. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[19,2] cannot find symbol
  27. symbol: class JsonIgnoreProperties
  28. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[69,22] cannot find symbol
  29. symbol: class ORCA_GETTERMHOLDINGRS_Type
  30. location: class com.td.inv.model.COIRQ
  31. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[69,66] cannot find symbol
  32. symbol: class RPM_GETPLANACCOUNTOVERVIEWRS_Type
  33. location: class com.td.inv.model.COIRQ
  34. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/model/COIRQ.java:[70,25] cannot find symbol
  35. symbol: class ORCA_GETTERMINSTRUCTIONRS_Type
  36. location: class com.td.inv.model.COIRQ
  37. [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
  38. [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
  39. [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
  40. [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
  41. [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
  42. [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
  43. [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
  44. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[23,57] cannot find symbol
  45. symbol: class AbstractRequestMessageData_Type
  46. location: class com.td.inv.wss.util.RPMInvoker
  47. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/util/RPMInvoker.java:[24,41] cannot find symbol
  48. symbol: class AbstractResponseMessageData_Type
  49. location: class com.td.inv.wss.util.RPMInvoker
  50. [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
  51. [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
  52. [ERROR] /D:/jenkins/workspace/CBAW/testP/WSW_Investment/src/main/java/com/td/inv/wss/application/InvestmentAPI.java:[9,36] cannot find symbol
  53. symbol: class Application

字符串
以下是我的父母POM:

  1. .....
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>group1</groupId>
  4. <artifactId>group1-artifact</artifactId>
  5. <version>1.0.1</version>
  6. <packaging>pom</packaging>
  7. <modules>
  8. <module>child1</module>
  9. </modules>
  10. .......


以下是我的孩子POM:

  1. .....
  2. <modelVersion>4.0.0</modelVersion>
  3. <parent>
  4. <groupId>group1</groupId>
  5. <artifactId>group1-artifact</artifactId>
  6. <version>1.0.1</version>
  7. <relativePath>(full url.....)/jenkins-parent-pom//pom.xml</relativePath>
  8. </parent>
  9. <groupId>group1</groupId>
  10. <artifactId>child1</artifactId>
  11. <version>0.0.1</version>
  12. <packaging>war</packaging>
  13. ......


下面是我如何尝试从父POM继承子POM中的依赖关系:

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>group1</groupId>
  5. <artifactId>group1-artifact</artifactId>
  6. <version>1.0.1</version>
  7. <type>pom</type>
  8. <scope>import</scope>
  9. </dependency>
  10. </dependencies>
  11. </dependencyManagement>


如果我把这些相同的依赖项放在子POM中,它会完美地工作。我使用jenkins在nexus中安装clean install和部署deploy。我用的是maven-3.3.9。在jenkins中,我读过git中两个不同maven项目中的父pom和子pom。我想从父POM继承所有的依赖项和插件。有可能吗?

moiiocjp

moiiocjp1#

您应该在<dependencies>节下声明要继承的依赖项以实现此目的。<dependencyManagement>用于以后必须在需要时在特定子级的<dependencies>中引用才能生效的定义。

UPDATE:声明每个子pom都将继承的依赖时要小心。很快,你就可以结束拥有你并不真正需要的依赖项,仅仅因为它们是在父级中声明的。正如其他评论者所提到的,<dependencyManagement>可能是一个更好的选择,尽管它不是您最初想要的。

zsbz8rwp

zsbz8rwp2#

事实上,你有两种方法来处理这个问题。
1.您可以在<dependencyManagement />节点下的父pom和每个需要它的子pom中分解依赖项,在<dependencies />节点中添加依赖项。您可以选择不设置依赖项的版本。
1.或者在<dependencies />节点的父pom中声明依赖关系,每个子节点都将受益于依赖关系。
例如,如果你在父pom中声明:

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.slf4j</groupId>
  4. <artifactId>slf4j-api</artifactId>
  5. <version>1.7.21</version>
  6. </dependency>
  7. </dependencies>
  8. <dependencyManagement>
  9. <dependencies>
  10. <dependency>
  11. <groupId>org.slf4j</groupId>
  12. <artifactId>slf4j-simple</artifactId>
  13. <version>1.7.21</version>
  14. <scope>runtime</scope>
  15. </dependency>
  16. </dependencies>
  17. </dependencyManagement>

字符串
那么slf4j-api将是所有子节点的依赖项。但是,您必须在子对象的pom中添加对slf4j-simple的依赖,如果它需要它:

  1. <dependencies>
  2. <dependency>
  3. <group>org.slf4j</group>
  4. <artifactId>slf4j-simple</artifactId>
  5. </dependency>
  6. </dependencies>


对于插件,它的工作原理相同,但使用<pluginManagement /><plugins />节点。所有的配置都可以放在父pom的插件定义中,你只需在子pom的<build />部分声明插件。

展开查看全部
ff29svar

ff29svar3#

下面是如何使用父和子pom的示例。
父pom如下:

  1. .....
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>group1</groupId>
  4. <artifactId>group1-artifact</artifactId>
  5. <version>1.0.1</version>
  6. <packaging>pom</packaging>
  7. <modules>
  8. <module>child1</module>
  9. // add more childs here
  10. </modules>
  11. <dependencyManagement>
  12. <dependencies>
  13. <dependency>
  14. <groupId>org.slf4j</groupId>
  15. <artifactId>slf4j-simple</artifactId>
  16. <version>1.7.21</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.abc</groupId>
  20. <artifactId>xyz</artifactId>
  21. <version>1.0.0</version>
  22. </dependency>
  23. </dependencies>
  24. </dependencyManagement>
  25. .......

字符串
如果您在dependencyManagement标记中指定了一个依赖项,它仅仅意味着您正在使这个jar可用于子pom。它将实际上在这一点上下载jar。子pom必须显式地提供groupIdartifactId,以便下载和使用jar来编译它的类。注意:您不必在子pom中包含依赖的版本
子pom将如下所示:

  1. .....
  2. <modelVersion>4.0.0</modelVersion>
  3. <parent> // this is how you will inherit from parent pom
  4. <groupId>group1</groupId>
  5. <artifactId>group1-artifact</artifactId>
  6. <version>1.0.1</version>
  7. </parent>
  8. <groupId>child1</groupId>
  9. <dependencies>
  10. <dependency>
  11. <groupId>org.slf4j</groupId>
  12. <artifactId>slf4j-simple</artifactId>
  13. <scope>runtime</scope>
  14. // no version needed as it would inherit from the parent pom
  15. </dependency>
  16. <dependency>
  17. <groupId>org.abc</groupId>
  18. <artifactId>xyz</artifactId>
  19. // no version needed as it would inherit from the parent pom
  20. </dependency>
  21. </dependencies>
  22. .......


将所有查尔兹对象共有的依赖项放在父pom的dependencyManagement标记中是一个很好的做法。通过这种方式,您可以从一个地方管理这些依赖项的版本。

展开查看全部
xriantvc

xriantvc4#

父pom.xml

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.0.4.RELEASE</version>
  9. </parent>
  10. <groupId>com.ll</groupId>
  11. <artifactId>parent-module</artifactId>
  12. <packaging>pom</packaging>
  13. <version>1.0-SNAPSHOT</version>
  14. <!-- child will inherit all content -->
  15. <dependencies>
  16. <dependency>
  17. <groupId>com.google.protobuf</groupId>
  18. <artifactId>protobuf-java</artifactId>
  19. <version>3.11.0</version>
  20. </dependency>
  21. </dependencies>
  22. <!-- child will inherit only version-->
  23. <dependencyManagement>
  24. <dependencies>
  25. <dependency>
  26. <groupId>org.apache.zookeeper</groupId>
  27. <artifactId>zookeeper</artifactId>
  28. <version>3.5.7</version>
  29. </dependency>
  30. </dependencies>
  31. </dependencyManagement>
  32. <modules>
  33. <module>sub-module1</module>
  34. <module>sub-module2</module>
  35. </modules>
  36. </project>

字符串
子pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.ll</groupId>
  7. <artifactId>parent-module</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <groupId>com.ll</groupId>
  11. <artifactId>sub-module1</artifactId>
  12. <version>1.0-SNAPSHOT</version>
  13. <packaging>jar</packaging>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.apache.zookeeper</groupId>
  17. <artifactId>zookeeper</artifactId>
  18. </dependency>
  19. </dependencies>
  20. </project>
  1. 1.child will use zookeeper:3.5.7, the version is from parent pom.xml <dependencyManagement>:<dependencies>:<dependency>.
  2. 2.child will use protobuf-java:3.11.o, it is from parent pom.xml <dependencies>:<dependency>.

的数据

展开查看全部
xuo3flqw

xuo3flqw5#

<dependencyManagement>中添加的内容将自动添加到孩子的pom中。唯一需要注意的是,在子模块的pom中,我们不需要显式地添加版本,否则这将是其他仅适用于子模块的依赖项。
parent_pom.xml

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>org.projectlombok</groupId>
  5. <artifactId>lombok</artifactId>
  6. <version>1.18.20</version>
  7. </dependency>
  8. </dependencies>
  9. </dependencyManagement>

字符串
child_pom.xml

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. </dependency>

展开查看全部
jmo0nnb3

jmo0nnb36#

除了其他回复之外,我想在这里补充一些关于依赖声明的总结要点。有两个部分与依赖关系有关,

  • 依赖关系管理:只是列出了依赖项的定义(实际构建或构建输出中不包含任何内容)。我们可以在这里定义版本。
  • 依赖性:这里包含的任何依赖项都将进入构建,并包含在输出中(根据范围)。如果我们指的是在dependencymanagement部分声明的任何依赖项,我们不需要在这里提到版本。但是如果我们在这里提到版本,它占主导地位。

所以父节点和子节点都可以有这两个部分,

*parent.dependencymanagement:一个依赖项的列表(用版本号来表示),所有子项目都可以引用它,但不需要提到版本号,只需要提到组和工件ID
*parent.dependency:所有子项目自动继承的依赖项列表(可用于常见依赖项,如junit)
*child.dependencymanagement:可以由其子项目(如果有)引用的依赖项列表(未提及版本)
*child.dependency:此子模块附带的依赖项列表

  • 总之,我们在父依赖项管理中提到了版本,我们可以在其他任何地方使用该依赖项与group & artifact id,除非我们想显式使用其他版本 *

相关问题