问题描述
我注意到在我的多模块 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...
[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。