代码之家  ›  专栏  ›  技术社区  ›  harun

编译多模块maven项目而无需安装到本地存储库

  •  6
  • harun  · 技术社区  · 10 年前

    我的多模块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 . 儿童1 儿童2 是并行开发的。所以在 儿童2 , 儿童1 应在不进行任何额外操作的情况下编译和部署。但我无法成功编译 儿童1 .运行后 mvn compile 命令打开 儿童1 出现以下错误消息:

    [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尝试在本地存储库中搜索 儿童2 。如果我跑 mvn install 命令打开 parent 项目,这两个项目都添加到本地存储库中。然后尝试编译 儿童1 成功。这似乎是一个解决方案,但并不方便。我想要的是编译 儿童1 同时编码 儿童1 儿童2 而无需安装到本地存储库。

    2 回复  |  直到 10 年前
        1
  •  17
  •   Robert Scholte    10 年前

    尝试 mvn compile -pl :child1 -am 哪里 -pl 是您想要构建的项目 -am 告诉maven如果这些项目是多模块项目的一部分,也要构建它们的依赖关系。

        2
  •  3
  •   Kristof Neirynck    10 年前

    你的错误是认为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