使用Spotify Docker Maven Plugin 1.0.0构建镜像报错:无法加载指定类
解决Spotify Docker Maven Plugin 1.0.0构建时ClassNotFoundException问题
这个报错的核心原因是:Spotify Docker Maven Plugin 1.0.0版本已经移除了com.spotify.docker.Resource类,同时不再支持旧版的<resources>配置块,你的POM配置还在使用旧版本的结构,导致插件加载配置时找不到对应的类,进而抛出异常。
下面提供两种可行的解决方案:
方案一:适配1.0.0版本的新配置结构
1.0.0版本重构了资源配置逻辑,用<artifactSet>替代了原来的<resources>,修改你的POM配置如下:
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>sample-boot:latest</imageName> <dockerDirectory>target/docker</dockerDirectory> <pushImage>true</pushImage> <artifactSet> <artifacts> <artifact> <!-- 对应原配置的directory+include --> <source>${project.build.directory}/${project.build.finalName}.war</source> <!-- 对应原配置的targetPath --> <destination>/</destination> </artifact> </artifacts> </artifactSet> </configuration> </plugin>
方案二:降级插件版本到旧版
如果你不想修改配置结构,可以将插件版本降级到仍然支持<resources>配置的旧版本(比如0.4.13),配置无需改动:
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <!-- 降级到支持resources配置的版本 --> <version>0.4.13</version> <configuration> <imageName>sample-boot:latest</imageName> <dockerDirectory>target/docker</dockerDirectory> <pushImage>true</pushImage> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.war</include> </resource> </resources> </configuration> </plugin>
补充说明
Spotify在1.0.0版本对插件做了大幅重构,除了资源配置外,其他一些旧配置元素也有变更。如果计划长期使用新版本,建议适配所有新配置;如果追求快速解决问题,降级版本是更直接的选择。
内容的提问来源于stack exchange,提问作者Thiru
相关产品推荐
相关产品推荐

