我无法使用 Maven 在我的 child 模块中使用继承的依赖项
I can't use inherited dependency in my child modules using maven
我有以下项目结构:
我想在模块 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' child 模块 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 所以它应该放置但我不需要指定版本(这是我的理解))放入我的 child pom.xml 然后,我有一个编译错误,因为我不能使用我的依赖项。
请注意,我将 spring-boot-starter-parent 作为 B 和 C 的 parent,因为项目 B 和 C 将是一个 Spring 启动项目。我不把它放在根 (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
问题是:
<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
的父模块
如果您不使用 A 作为父 POM,则无法使用 A 中的 dependencyManagement。
我有以下项目结构:
我想在模块 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' child 模块 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 所以它应该放置但我不需要指定版本(这是我的理解))放入我的 child pom.xml 然后,我有一个编译错误,因为我不能使用我的依赖项。
请注意,我将 spring-boot-starter-parent 作为 B 和 C 的 parent,因为项目 B 和 C 将是一个 Spring 启动项目。我不把它放在根 (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
问题是:
<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
的父模块如果您不使用 A 作为父 POM,则无法使用 A 中的 dependencyManagement。