Maven2 跨父子共享依赖(不重新声明子依赖)

Posted

技术标签:

【中文标题】Maven2 跨父子共享依赖(不重新声明子依赖)【英文标题】:Maven2 sharing dependencies across parent and children (without redeclaring dependencies in children) 【发布时间】:2011-03-13 19:16:27 【问题描述】:

在 maven1 中,我使用 extend 标签告诉我的子项目使用他们的父配置。

在父项中声明的所有依赖项都可用于扩展(子)项目。

现在有了 maven2,我正在使用继承/组合功能,我必须在每个子项目中重新声明我的依赖项(减去版本号)。 (见how-to-share-common-properties-among-several-maven-projects)

有没有办法告诉 maven 我想在我所有的孩子之间分享我的一些依赖关系?

【问题讨论】:

【参考方案1】:

现在有了 maven2,我正在使用继承/组合功能,我必须在每个子项目中重新声明我的依赖项(减去版本号)

不,你没有。在父 pom 中声明的依赖被继承。

有没有办法告诉 maven 我想在我所有的孩子之间分享我的一些依赖关系?

只需在子 POM 中声明 <parent> 元素。例如,对于这个父 POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>my.group.id</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Demo - Parent</name>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <modules>
    <module>child</module>
  </modules>
</project>

还有这个子模块的 POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>my.group.id</groupId>
    <artifactId>parent</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <name>Demo - Child</name>
  <artifactId>child</artifactId>
  <packaging>jar</packaging>
</project>

junit 依赖项按预期继承:

$ mvn 依赖:树 [INFO] 正在扫描项目... [INFO] 搜索带有前缀的插件的存储库:“依赖”。 [信息] --------------------------------------------- ------------------------- [INFO] 建筑演示 - 儿童 [INFO] 任务段:[依赖:树] [信息] --------------------------------------------- ------------------------- [信息] [依赖:树执行:默认-cli] [信息] my.group.id:child:jar:1.0-SNAPSHOT [信息] \- junit:junit:jar:3.8.1:test [信息] --------------------------------------------- ------------------------- [信息] 构建成功 [信息] --------------------------------------------- ------------------------- ...

我怀疑您是在 the &lt;dependencyManagement&gt; section 中声明依赖项(还有其他目的)。

【讨论】:

以上是关于Maven2 跨父子共享依赖(不重新声明子依赖)的主要内容,如果未能解决你的问题,请参考以下文章

maven父子工程的pom.xml继承

分模块开发的父子工程的pom的依赖关系

maven 父子项目

maven 父子项目

有啥办法可以做到,所以我不必重新声明 module.exports 的依赖项?

如何找到跨文件重命名和重新排序添加特定 Gradle 构建依赖项的 Git 提交?