编译多模块maven项目而不安装到本地存储库
Compiling multi module maven projects without installing to local repository
我的多模块 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
。在 child1
上执行 运行ning mvn compile
命令后,出现此错误消息:
[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
。如果我对 parent
项目执行 运行 mvn install
命令,则两个项目都会添加到本地存储库。然后任何编译 child1
的尝试都会成功。这似乎是一种解决方案,但并不方便。我想要的是在编码 child1
和 child2
时编译 child1
而无需安装到本地存储库。
你的错误是认为 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
try mvn compile -pl :child1 -am
,其中 -pl
是你想要构建的项目,-am
告诉 maven 构建这些项目的依赖项,如果它们是多模块项目。
我的多模块 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
。在 child1
上执行 运行ning mvn compile
命令后,出现此错误消息:
[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
。如果我对 parent
项目执行 运行 mvn install
命令,则两个项目都会添加到本地存储库。然后任何编译 child1
的尝试都会成功。这似乎是一种解决方案,但并不方便。我想要的是在编码 child1
和 child2
时编译 child1
而无需安装到本地存储库。
你的错误是认为 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
try mvn compile -pl :child1 -am
,其中 -pl
是你想要构建的项目,-am
告诉 maven 构建这些项目的依赖项,如果它们是多模块项目。