我在同一个目录中有两个项目,比如说 A 和dir
B。B 是其模块 C 的父项目。C 依赖于 A。目录结构:
dir/
A/
B/
C/
我使用这种方法创建一个带有模块的项目并显示 C 依赖于 A。这样做之后,Netbeans 开始在 C 中看到 A 的包,例如它显示没有丢失的包,提示在 C 中使用来自 A 的类.如果我把A作为B的一个模块,mvn clean install
说maven reactor找到了正确的编译项目顺序,并按照A、B、C的顺序编译。mvn dependency:tree
说明groupB:C:jar:0.0.1
有一个子节点groupA:A:jar:0.0.1:compile
。
我不确定 A 是否可以成为 B 的模块,因为 A 有另一个父级(Spring boot)。因此,我尝试了另一种变体:从 B 的模块中删除 A,然后mvn clean install
在 A 中,以便(我猜)它产生的 jar 进入本地 repo。这两种变体对于 maven 和 Netbeans 似乎都可以,但对于编译器则不行。在编译过程中,C 看不到 A 的包。
我mvn clean install
在这三个项目中的任何一个中都做过。C 中的依赖项必须具有 A 的确切属性,否则在 Maven 中会产生依赖项错误。似乎Netbeans的提示机制和Maven都认为A是C的库。只是编译器没有看到。我想我犯了一个新手错误。会是什么?
相关片段pom.xml
:
A:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>groupA</groupId>
<artifactId>A</artifactId>
<packaging>jar</packaging>
<version>0.0.1</version>
<name>projectA</name>
<description>project A</description>
B:(我尝试了 A 是 B 的模块的变体,是否被注释掉)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/>
</parent>
<groupId>groupB</groupId>
<artifactId>B</artifactId>
<packaging>pom</packaging>
<version>0.0.1</version>
<name>projectB</name>
<description>project B</description>
<modules>
<!--module>../A</module-->
<module>C</module>
</modules>
C:
<parent>
<groupId>groupB</groupId>
<artifactId>B</artifactId>
<version>0.0.1</version>
<relativePath>../</relativePath>
</parent>
<groupId>groupB</groupId>
<artifactId>C</artifactId>
<packaging>jar</packaging>
<version>0.0.1</version>
<name>projectC</name>
<description>project C</description>
<dependencies>
<dependency>
<groupId>groupA</groupId>
<artifactId>A</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>