我的多模块maven项目中存在编译(和打包)问题。编译两个项目中的一个项目时出现问题,这两个项目是兄弟项目并包含在父项目中,另一个项目依赖于另一项目。为简单起见,我在这里草绘项目文件夹结构和pom.xml
内容。
folder structure
-parent
|
|-child1
| |-src
| | |-main
| | |-java
| | |-Child1Class.java
| |-pom.xml
|
|-child2
| |-src
| | |-main
| | |-java
| | |-Child2Class.java
| |-pom.xml
|
|-pom.xml
pom.xml of parent
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.project</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>parent</name>
<modules>
<module>child1</module>
<module>child2</module>
</modules>
</project>
pom.xml of child1
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example.project</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.example.project</groupId>
<artifactId>child1</artifactId>
<version>1.0-SNAPSHOT</version>
<name>child1</name>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>child2</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
pom.xml of child2
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example.project</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.example.project</groupId>
<artifactId>child2</artifactId>
<version>1.0-SNAPSHOT</version>
<name>child2</name>
<dependencies>
</dependencies>
</project>
如图所示,child2
是child1
的依赖关系。 child1
和child2
是并行开发的。因此,在child2
中的任何源代码更改后,应编译和部署child1
,而无需任何其他操作。但我无法成功编译child1
。在mvn compile
上运行child1
命令后,会出现此错误消息:
[ERROR] Failed to execute goal on project child1: Could not resolve dependencies for project com.example.project:child1: jar:1.0-SNAPSHOT: Could not find artifact com.example.project:child2:jar:1.0-SNAPSHOT -> [Help 1]
正如我所见,maven尝试搜索child2
的本地存储库。如果我在mvn install
项目上运行parent
命令,则两个项目都将添加到本地存储库。然后,任何编译child1
的尝试都是成功的。这似乎是一种解决方案,但不方便。我想要的是在编码child1
和child1
的同时编译child2
,而无需安装到本地存储库。
答案 0 :(得分:8)
尝试mvn compile -pl :child1 -am
,其中-pl
是您要构建的项目,-am
告诉maven构建这些项目的依赖项,如果它们是多模块项目。
答案 1 :(得分:3)
你的错误是认为maven会在建立孩子时建立父母。 它不是。 尝试构建父级,maven将自动猜测构建顺序。
C:\parent\child1> mvn clean package
[INFO] BUILD FAILURE
C:\parent\child1> cd ..
C:\parent> mvn clean package
[INFO] parent ............................................. SUCCESS [ 0.148 s]
[INFO] child2 ............................................. SUCCESS [ 1.209 s]
[INFO] child1 ............................................. SUCCESS [ 0.073 s]
[INFO] BUILD SUCCESS