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

Java17+Maven构建Docker镜像运行时类找不到错误求助

问题分析与解决方案

问题根源

你当前使用的maven-jar-plugin仅会打包项目自身的编译代码,并未将依赖的第三方库(如blade-core)包含进最终生成的JAR文件。容器运行时,JVM无法在类路径中找到这些依赖类,因此抛出ClassNotFoundException。

解决方案:构建包含依赖的可执行JAR

以下两种方案均可解决问题,任选其一即可:

方案1:使用maven-assembly-plugin构建胖JAR

修改pom.xml中的<build>区块,替换原有插件配置:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.3.0</version>
      <configuration>
        <!-- 指定打包包含所有依赖 -->
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <!-- 指定主类入口 -->
            <mainClass>com.myproj.App</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <!-- 绑定到package阶段自动执行 -->
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

同时修改Dockerfile中复制JAR的路径(该插件生成的JAR会带-jar-with-dependencies后缀):

COPY --from=builder /workdir/target/myproj-*-jar-with-dependencies.jar /myproj.jar

方案2:使用maven-shade-plugin(推荐,更灵活)

修改pom.xml中的<build>区块:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.4.1</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <!-- 指定主类入口 -->
                <mainClass>com.myproj.App</mainClass>
              </transformer>
            </transformers>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

该插件生成的JAR会直接包含所有依赖,无需修改Dockerfile。

验证与重新部署

  1. 本地执行打包命令验证:
mvn package -DskipTests

执行jar tf target/myproj-*.jar,若输出中包含com/hellokaton/blade/Blade.class,则说明打包成功。

  1. 重新构建镜像并运行:
docker build . --tag gcr.io/myproj-c39b9/myproj 
docker run -d -p 80:80 gcr.io/myproj-c39b9/myproj

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:10:14