跳过一个模块的Maven部署

7

我有一个多模块的maven项目。父pom文件如下:

<project>
    ...
    <packaging>pom</packaging>   
    <modules>
        <module>common</module>
        <module>a</module>
        <module>b</module>
    </modules>
</project>

common 构建一个 jar 文件,其他模块通过将其作为依赖项添加来使用,例如:

<dependency>
    <groupId>my.project</groupId>
    <artifactId>common</artifactId>
    <version>${module.common.version}</version>
</dependency>

模块ab是Spring Boot项目,具有Spotify Docker插件

我需要能够运行mvn deploy,以便使 Spotify 插件推送 Docker 镜像。

mvn install可以正常工作,它构建了 Docker 镜像。但是为了将它们推送到 Docker 仓库,在运行mvn deploy时,它会为common模块抛出错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project common: Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter

在寻找此错误时,这个答案建议在distributionManagement部分中添加存储库 URL。但是我不想部署common。我只想构建它,以便将其注入其他模块作为依赖项并部署那些其他模块。我该怎么做?

我尝试使用此命令仅部署ab,但它为common给出了相同的错误:

mvn clean \
   -DdockerRegistryHost=123.dkr.ecr.us-west-1.amazonaws.com/test1 \
   --projects a,b \
   --also-make \
   deploy

你想将此模块设置为“永不”部署吗? - chrylis -cautiouslyoptimistic-
@chrylis 当然,它不应该被部署,只需作为依赖项添加即可。 - Kartik
你尝试过将 maven-deploy-plugin 配置为 executions=none 吗? - chrylis -cautiouslyoptimistic-
1个回答

12

你可以通过配置 maven-deploy-plugin 实现你想要的功能。

尝试将以下内容添加到你的父 POM 文件中:

<build>
    ...
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>3.0.0-M1</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
    ...
 </build>

或者在命令行中添加-Dmaven.deploy.skip=true


谢谢。在这里指定“版本”有什么原因吗?如果我们不指定它,它会像其他依赖项一样选择最新的版本吗? - Kartik
2
不,它并不会。为了保证可重复性,始终要指定插件依赖项。如果您没有指定插件版本,则将获取与您使用的特定maven版本相关联的版本。此外,我认为“像其他任何依赖项一样选择最新版本”也不是一个正确的做法。 - Steve C
1
@steve,Maven 如何知道要跳过上传哪些构件? - Dhananjay
@SteveC,我该如何在运行时使用“-Dmaven.deploy.skip=true”跳过特定模块的Maven部署? - Rishab Prasad
1
@RishabPrasad,我认为您无法以那种方式做到这一点。您需要使用配置文件来完成此操作。 - Steve C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接