【问题标题】:I can't use inherited dependency in my child modules using maven我不能在使用 maven 的子模块中使用继承的依赖项
【发布时间】:2020-12-19 16:33:47
【问题描述】:

我的项目结构如下:

我想在模块 B 和 C 中使用相同的依赖项(我们称之为:**dep-for-B-and-C**)。

 A
 ├── B
 │   └── pom.xml
 ├── C
 │   └── pom.xml
 │
 └── pom.xml

root 'A' pom.xml:

...
<groupId>my-group-id</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
    <module>B</module>
    <module>C</module>
</modules>
...

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>***</groupId>
            <artifactId>dep-for-B-and-C</artifactId>
            <version>***</version>
        </dependency>
    </dependencies>
</dependencyManagement>

“B”和“C”子模块 pom.xml:

  ...
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <dependency>
    <groupId>***</groupId>
    <artifactId>dep-for-B-and-C</artifactId>
  </dependency>
  ...

如果我将 dep-for-B-and-C 作为 A 和 B 的依赖项,那么在运行 mvn clean install 之后,我收到以下错误:

[ERROR]     'dependencies.dependency.version' for ***:dep-for-B-and-C-jar:jar is missing. @ line 39, column 21

如果我没有将依赖项(我正在使用dependencyManagement,所以它应该放置但我不需要指定版本(这是我的理解))放入我的子 pom.xml 中,那么我有一个编译错误因为我不能使用我的依赖。

请注意,我将 spring-boot-starter-parent 作为 B 和 C 的父级,因为项目 B 和 C 将是 Spring boot 项目。我不把它放在根目录(A pom.xml)的原因是我可能会有另一个不是Java项目的模块。

这可能是原因吗? 如果是,那么我应该创建这样的项目结构吗?

A
├───Backend
│    ├── B
│    │   └── pom.xml
│    ├── C
│    │   └── pom.xml
│    │
│    └── pom.xml (spring-boot-starter as parent)
│
├───Frontend (using: eirslett mvn plugin)
│
└──pom.xml

【问题讨论】:

标签: java maven pom.xml


【解决方案1】:

如果不使用 A 作为父 POM,则不能使用 A 中的dependencyManagement。

【讨论】:

    【解决方案2】:

    问题来了:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
      </parent>
    

    在模块 B 和 C 中。请添加模块 A 作为 B 和 C

    的父模块

    【讨论】:

    • 谢谢。所以看起来我应该像我提到的那样创建一个新的项目结构。
    猜你喜欢
    • 2019-09-21
    • 2015-06-23
    • 2021-02-12
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2017-10-30
    相关资源
    最近更新 更多