微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未为子模块发布 POM

如何解决未为子模块发布 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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。