我的项目结构如下:
.
|--module
| `-- pom.xml
| --submodule
| `-- pom.xml
`-- pom.xml
POM(简化):
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>project</artifactId>
<name>Project</name>
<groupId>org.myorg</groupId>
<version>1.0.6-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>module</module>
</modules>
(...)
</project>
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.myorg</groupId>
<artifactId>project</artifactId>
<version>1.0.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>module</artifactId>
<name>Module</name>
<groupId>org.myorg</groupId>
<version>1.0.6-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>submodule</module>
</modules>
(...)
</project>
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.myorg</groupId>
<artifactId>module</artifactId>
<version>1.0.6-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>submodule</artifactId>
<name>Submodule</name>
<groupId>org.myorg</groupId>
<version>1.0.6-SNAPSHOT</version>
<packaging>jar</packaging>
(...)
</project>
在POM的项目或模块中运行maven install
时,项目已成功构建。但是,当在子模块中运行时会出现此错误:
无法在项目子模块上执行目标:找不到工件org.myorg:project:pom:1.0.6-SNAPSHOT
为什么我的子模块找不到POM 项目?指定了相对路径。
答案 0 :(得分:4)
我注意到的第一件事是每个拥有父项的子模块都包含以下行:
<relativePath>../pom.xml</relativePath>
这是无用的,因为它在maven中是默认的,或者换句话说就是删除它。
此外,在多模块构建中,您不应定义版本。如果groupId始终相同,您也可以省略groupId,导致当前模块从其父级继承该版本。
module:pom.xml
<project>
<parent>...
</parent>
<artifactId>module</artifactId>
<packaging>pom</packaging>
<name>Module</name>
<modules>
<module>submodule</module>
</modules>
(...)
</project>
除此之外,您无法进入子模块并致电
mvn install
如果您想安装多模块构建的单独模块,您应该使用以下内容:
mvn -amd -pl submodule install
这将做你喜欢做的事情,但通常你应该安装一个完整的mulit-module构建,除非你完全知道你在做什么。 选项 -amd 是 - also-make-dependents 的缩写。 -pl 是 - projects 的缩写,用于定义在调用期间应该进行的项目列表。
答案 1 :(得分:1)
首先,您需要在根项目上运行mvn install
,它将在您的本地maven仓库中创建工件。从病房第二次开始,您只能运行子模块。如果你不在root项目上运行maven就不会为你的项目创建任何工件,所以当你运行子模块时它无法从maven repo中找到工件。