Java maven无法从子目录生成子模块
我有一个maven项目,包含父pom和子模块,结构如下:Java maven无法从子目录生成子模块,java,maven,Java,Maven,我有一个maven项目,包含父pom和子模块,结构如下: root/pom.xml root/parent/pom.xml root/child1/pom.xml root/child2/pom.xml root/child2/child21/pom.xml 每个子pom和根pom都将根/父项声明为其父项。child21将child1作为依赖项 当我尝试从child1目录执行mvn安装时,maven成功地构建并安装了child1jar。但当我从child2或child21目录执行mvn安装时,
root/pom.xml
root/parent/pom.xml
root/child1/pom.xml
root/child2/pom.xml
root/child2/child21/pom.xml
每个子pom和根pom都将根/父项声明为其父项。child21将child1作为依赖项
当我尝试从child1目录执行mvn安装时,maven成功地构建并安装了child1jar。但当我从child2或child21目录执行mvn安装时,maven会出现以下错误:
[错误]无法在项目child21上执行目标:无法解析项目groupId:child21:jar:0.0.1-SNAPSHOT:无法在groupId:child1:jar:0.0.1-SNAPSHOT:无法读取groupId:child1:jar:0.0.1-SNAPSHOT的项目描述符:无法在jme repo()中找到项目groupId:parent:pom:0.0.1-SNAPSHOT的依赖项->[帮助1]
我曾尝试用谷歌搜索我的项目结构可能有什么问题,但运气不佳。有人能为child21的构建提供建议吗?
我的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>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>
groupId
父母亲
0.0.1-快照
./parent/pom.xml
根
聚甲醛
孩子1
孩子2
家长
<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>
groupId
父母亲
0.0.1-快照
聚甲醛
groupId
孩子1
${project.version}
...
jme回购
JME3官方Maven回购协议
http://updates.jmonkeyengine.org/maven/
org.apache.maven.plugins
maven编译器插件
3.2
${java.source.version}
${java.target.version}
儿童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>
<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>
groupId
父母亲
0.0.1-快照
../parent/pom.xml
孩子1
罐子
...
儿童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>
groupId
父母亲
0.0.1-快照
../parent/pom.xml
孩子2
聚甲醛
孩子21
儿童21
<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>
<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>
groupId
父母亲
0.0.1-快照
../../parent/pom.xml
孩子21
罐子
groupId
孩子1
使用解决方案更新 根据下面接受的答案,我添加了父项目作为根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>
groupId
父母亲
0.0.1-快照
./parent/pom.xml
根
聚甲醛
父母亲
孩子1
孩子2
然后,当开发人员第一次构建项目时,就会安装父pom。随后,他们将能够独立构建child2和child21项目。将child21更改为从其父代child2继承,请参见以下内容:
<parent>
<groupId>groupId</groupId>
<artifactId>child2</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
groupId
孩子2
0.0.1-快照
这是一个相当笨拙的模块结构,但它仍然可以工作。问题是,当您构建模块child21
(或child2
)时,child1
依赖项不是当前构建的一部分,而是在存储库中查找的。该依赖项的父项也是如此,即父项
模块。但是,我假设,parent
从未安装在那里-如果在root
上运行mvn clean install
,它不会构建父级
,父级只在子级
模块中通过相对路径引用
要修复它,您必须首先将
父级POM安装到存储库中。在父模块中运行mvn安装
。之后,构建child1
——它也将安装到存储库中。现在,存储库中提供了构建模块child21所需的所有内容。bullseye。我将parent作为一个模块添加到根pom中,它就像一个符咒。非常感谢。模块结构是我从工作中学到的,有些模块有不同的父模块。所以有些模块有一组依赖项,有些模块有其他依赖项。这是因为有些项目是osgi捆绑包,有些是spring引导应用程序(从前者逐渐迁移到后者)。