【问题标题】:Do parent pom artifacts need to be remotely deployed?是否需要远程部署父 pom 工件?
【发布时间】:2021-08-23 13:07:46
【问题描述】:

我有两个项目,项目 A 和项目 B。

项目 B 是一个多模块项目,其中子模块 1-3 是 JAR,父模块是包装类型 pom

module-parent
|- module-child-1
|- module-child-2
|- module-child-3

父pom长这样

<?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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>my.group.id</groupId>
    <artifactId>module-parent</artifactId>
    <packaging>pom</packaging>
    <version>2.4.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
        <relativePath />
    </parent>

    <modules>
        <module>module-child-1</module>
        <module>module-child-2</module>
        <module>module-child-3</module>
    </modules>

    <properties>
        <java.version>1.11</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

在所有其他子 pom.xml 文件中,我们将 &lt;parent&gt; 包含为模块父级,而将 maven-deploy-plugin 的 &lt;skip&gt; 设置为 false。

<parent>
    <groupId>my.group.id</groupId>
    <artifactId>module-parent</artifactId>
    <version>2.4.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
</parent>

此外,module-child-1 是一个 &lt;dependency&gt;,在 module-child-2 和 module-child-3 中都定义和使用

项目 A 是一个完全独立的普通项目(它不是一个多模块项目),它可以简单地将 3 个子模块中的任何一个用作其项目中的依赖项。

<dependency>
    <groupId>my.group.id</groupId>
    <artifactId>module-child-2</artifactId>    (or module-child-1/module-child-3)
    <version>1.0.0-SNAPSHOT</version>
</dependency>

我的问题是,在项目 A 上运行 maven 命令 dependency:tree 时,它会抛出以下错误,因为它尝试在我的 settings.xml 文件中定义的 &lt;servers&gt; 中搜索模块父级,即使模块父级类型为pom

[错误] 未能在 Project-A 上执行目标:无法解决 项目 my.group.id:Project-A:jar:0.0.1-SNAPSHOT 的依赖项: 未能收集依赖项 my.group.id:module-child-2:jar:1.0.0-SNAPSHOT:读取工件失败 my.group.id:module-child-2:jar:1.0.0-SNAPSHOT 的描述符:可以 不转移工件 my.group.id:module-parent:pom:2.4.0-SNAPSHOT 从/到 MyServer-SNAPSHOT(https://example):拒绝访问: ........,原因短语:禁止。

是否也需要远程部署 pom 工件?只有 3 个子模块已经部署。我真的需要为单个 pom 文件部署单独的工件吗?

来自子模块的代码非常好,但是我猜它无法从任何子模块的&lt;parent&gt; 读取,所以它可能依赖于项目 A 的&lt;parent&gt;而是。

【问题讨论】:

    标签: java maven pom.xml


    【解决方案1】:

    是的,您还需要部署父 POM。如果没有父 POM,Maven 无法读取它们。您应该将包括父母在内的所有模块部署到同一个地方。

    【讨论】:

      【解决方案2】:

      您可以使用 Flatten Maven Plugin 从最终部署的 POM 中删除父级,以便在没有父级的情况下使用它。

      不过,通常的方法是 Luciano 所描述的。

      【讨论】:

        猜你喜欢
        • 2019-08-16
        • 2021-07-12
        • 1970-01-01
        • 2014-07-03
        • 1970-01-01
        • 2015-08-01
        • 2015-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多