未为子模块发布 POM

问题描述

我注意到在我的多模块 maven 项目中,子模块的 pom 文件没有部署到 Artifactory。这会导致依赖项目中的错误,这些依赖项目依赖于子模块的 POM 中的依赖信息,从而导致 Jenkins 构建中的错误,例如:The POM for com.myorg.services:mydomain-model:jar:1.6.1-SNAPSHOT is missing,no dependency information available 以及随后的编译错误,因为这些传递依赖没有被下载。

更多信息:

依赖项目,一个 Spring Boot 应用程序,包含以下依赖项:

<dependency>
  <groupId>com.myorg.services</groupId>
  <artifactId>mydomain-model</artifactId>
  <version>1.6.1-SNAPSHOT</version>
</dependency>

同时,目标项目的结构如下,父 POM 为:

<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.myorg.services</groupId>
    <artifactId>mydomain</artifactId>
    <version>1.14.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>mydomain</name>
    <description>mydomain</description>

    <parent>
        <groupId>com.myorg</groupId>
        <artifactId>org-parent</artifactId>
        <version>1.2.3</version>
    </parent>

    <modules>
        <module>mydomain-model</module>     
    </modules>
    (...)
</project>

和子 POM:

<project>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.myorg.services</groupId>
        <artifactId>mydomain</artifactId>
        <version>1.14.0-SNAPSHOT</version>
    </parent>

    <groupId>com.myorg.services</groupId>
    <artifactId>mydomain-model</artifactId>
    <version>1.6.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>mydomain-model</name>
    <description>My Domain Model</description>
    (...)
</project>

这些是显示部署的日志:

[pool-19-thread-2] INFO org.jfrog.build.extractor.maven.BuildInfoClientBuilder - [pool-19-thread-2] deploying artifact: https://artifactory.mycompany.com/artifactory/libs-snapshot-local/com/myorg/services/mydomain-model/1.6.1-SNAPSHOT/mydomain-model-1.6.1-SNAPSHOT.jar
[pool-19-thread-1] INFO org.jfrog.build.extractor.maven.BuildInfoClientBuilder - [pool-19-thread-1] deploying artifact: https://artifactory.mycompany.com/artifactory/libs-snapshot-local/com/myorg/services/mydomain/1.14.0-SNAPSHOT/mydomain-1.14.0-SNAPSHOT.pom
[main] INFO org.jfrog.build.extractor.maven.BuildDeploymentHelper - Artifactory Build Info Recorder: publish build info set to false,build info will not be published...

这些是显示缺少 POM 导致依赖项目编译错误的日志:

[main] INFO org.apache.maven.cli.transfer.Slf4jMavenTransferListener - Downloading: https://artifactory.mycompany.com/artifactory/libs-snapshot/com/myorg/services/mydomain-model/1.6.1-SNAPSHOT/mydomain-model-1.6.1-SNAPSHOT.pom
[main] WARN org.codehaus.plexus.PlexusContainer - The POM for com.myorg.services:mydomain-model:jar:1.6.1-SNAPSHOT is missing,no dependency information available

我检查了 artifactory,一个 POM 文件只对父模块可用,而不能用于子模块,它只提供一个 Jar 文件。我希望将子模块的 POM 部署到 artifactory 以避免这些错误/警告。有可能吗?

解决方法

通过将我的 Maven 构建目标从 clean verify 切换到 clean install 来解决。显然 jfrog 足够聪明,可以通过 maven-jar-plugin(通过 verify 生命周期阶段调用)构建和部署子模块依赖项,但它需要运行 maven-install-plugin(通过 {{1}阶段)检测并部署到工件中的附加工件,即 pom.xml。