我有一个带有父pom和子模块的maven项目,结构如下:
root/pom.xml
root/parent/pom.xml
root/child1/pom.xml
root/child2/pom.xml
root/child2/child21/pom.xml
每个子pom和根pom声明root / parent为其父级。 child21将child1作为依赖项。
当我尝试从child1目录执行mvn install时,maven成功构建并安装了child1 jar。但是当我从child2或child21目录执行mvn install时,maven会出现以下错误:
[错误]无法在项目child21上执行目标:无法解析项目groupId的依赖项:child21:jar:0.0.1-SNAPSHOT:无法在groupId收集依赖项:child1:jar:0.0.1-SNAPSHOT:失败读取groupId的工件描述符:child1:jar:0.0.1-SNAPSHOT:找不到工件groupId:parent:pom:0.0.1-SNAPSHOT in jme-repo(http://updates.jmonkeyengine.org/maven/) - > [帮助1]
我尝试使用谷歌搜索我的项目结构可能出错但没有运气。任何人都可以帮助建议让孩子21建立的方法吗?
我的poms包含:
根
<parent>
<groupId>groupId</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>./parent/pom.xml</relativePath>
</parent>
<artifactId>root</artifactId>
<packaging>pom</packaging>
<modules>
<module>child1</module>
<module>child2</module>
</modules>
父
<groupId>groupId</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>groupId</groupId>
<artifactId>child1</artifactId>
<version>${project.version}</version>
</dependency>
...
</dependencies>
<dependencyManagement>
<repositories>
<repository>
<id>jme-repo</id>
<name>JME3 Official Maven Repo</name>
<url>http://updates.jmonkeyengine.org/maven/</url>
</repository>
</repositories>
<build>
<plugins>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>${java.source.version}</source>
<target>${java.target.version}</target>
</configuration>
</plugins>
</build>
儿童1
<parent>
<groupId>groupId</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>child1</artifactId>
<packaging>jar</packaging>
<dependencies>...</dependencies>
儿童2
<parent>
<groupId>groupId</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>child2</artifactId>
<packaging>pom</packaging>
<modules>
<module>child21</module>
</modules>
21岁儿童
<parent>
<groupId>groupId</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
</parent>
<artifactId>child21</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>groupId</groupId>
<artifactId>child1</artifactId>
</dependency>
</dependencies>
更新解决方案 根据下面接受的答案,我将父项目添加为根pom的模块:
<parent>
<groupId>groupId</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>./parent/pom.xml</relativePath>
</parent>
<artifactId>root</artifactId>
<packaging>pom</packaging>
<modules>
<module>parent</module>
<module>child1</module>
<module>child2</module>
</modules>
然后,当开发人员第一次构建项目时,将安装父pom。随后他们将能够独立构建child2和child21项目。
答案 0 :(得分:3)
这是一个非常笨拙的模块结构,但它仍然可以工作。问题是,当您构建模块child21
(或child2
)时,child1
依赖项不是当前构建的一部分,而是在存储库中查找。那个依赖项的父代也是parent
模块。但是,我认为,parent
从未安装在那里 - 如果您在mvn clean install
上运行root
,则不会构建parent
,child
仅在{{1}中引用相对路径的模块。
要修复它,必须先将parent
POM安装到存储库中。在父模块中运行mvn install
。之后,构建child1
- 它也将安装到存储库中。现在,存储库中提供了构建模块child21
所需的一切。
答案 1 :(得分:0)
将child21更改为从其父 - child2继承,见下文:
<parent>
<groupId>groupId</groupId>
<artifactId>child2</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>