You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac下不修改父POM禁用Spotify docker-maven-plugin的方法

问题

父POM配置如下:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>${docker-maven-plugin.version}</version>
            </plugin>
        </plugins>
    </pluginManagement>

    <plugins>
        <!-- for docker -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <configuration>
                ...
            </configuration>
        </plugin>
    </plugins>
</build>

由于使用M1 Mac,Spotify的docker-maven-plugin构建Dockerfile时会报错,因此子POM改用fabric8的docker-maven-plugin,配置如下:

<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>

    <parent>
        <groupId>com.groupExample</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- Docker maven plugin -->
            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.40.3</version>
                <configuration>
                   ...
                </configuration>

                <!-- activation -->
                <dependencies>
                    <dependency>
                        <groupId>javax.activation</groupId>
                        <artifactId>activation</artifactId>
                        <version>1.1.1</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

执行mvn clean install docker:build docker:push命令时,Maven仍使用Spotify插件而非fabric8插件,导致构建失败。尝试过以下方案但均无效:

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>default</id>
            <phase>none</phase>
        </execution>
    </executions>
    <inherited>false</inherited>
</plugin>
<configuration>
    <skip>true</skip>
</configuration>

请问在不修改父POM的前提下,如何在M1 Mac上完成Dockerfile构建?

解决方案

以下几种方法可在不修改父POM的前提下解决问题:

1. 直接指定fabric8插件完整目标执行

由于两个插件的artifactId都是docker-maven-plugin,默认目标前缀均为docker,可通过完整插件坐标指定执行fabric8的插件:

mvn clean install io.fabric8:docker-maven-plugin:0.40.3:build io.fabric8:docker-maven-plugin:0.40.3:push

该方式直接指定插件的groupId、artifactId、版本和目标,完全绕过父POM中的Spotify插件。

2. 覆盖禁用Spotify插件并为fabric8插件设置唯一前缀

在子POM的<plugins>中先覆盖Spotify插件并禁用,同时为fabric8插件配置自定义目标前缀避免冲突:

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <!-- 覆盖并禁用父POM的Spotify插件 -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
            <executions>
                <execution>
                    <id>default</id>
                    <phase>none</phase>
                </execution>
            </executions>
        </plugin>
        <!-- 配置fabric8插件并设置自定义前缀 -->
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.40.3</version>
            <configuration>
                <!-- 你的自定义配置 -->
                ...
                <goalPrefix>fabric8-docker</goalPrefix>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>javax.activation</groupId>
                    <artifactId>activation</artifactId>
                    <version>1.1.1</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

之后使用自定义前缀执行命令:

mvn clean install fabric8-docker:build fabric8-docker:push

3. 在子POM中排除继承Spotify插件

通过<pluginManagement>在子POM中设置Spotify插件不被继承:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>${docker-maven-plugin.version}</version>
                <inherited>false</inherited>
            </plugin>
        </plugins>
    </pluginManagement>

    <finalName>${project.artifactId}</finalName>
    <plugins>
        <!-- 配置fabric8插件 -->
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.40.3</version>
            <configuration>
                ...
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>javax.activation</groupId>
                    <artifactId>activation</artifactId>
                    <version>1.1.1</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

此时执行原命令mvn clean install docker:build docker:push就会自动使用fabric8的插件。


内容的提问来源于stack exchange,提问作者melontart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:55:35