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

基于Maven构建的Spring Boot应用部署Azure AKS时主类找不到

Spring Boot应用部署AKS后出现ClassNotFoundException问题

本地运行正常的Maven构建Spring Boot应用,通过GitHub Action部署到Azure Kubernetes(AKS)后Pod进入错误状态,日志报错如下:

Exception in thread "main" java.lang.ClassNotFoundException: package com.LearnBS.JavaBS.JavaBsApplication at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592) at org.springframework.boot.loader.net.protocol.jar.JarUrlClassLoader.loadClass(JarUrlClassLoader.java:107 at org.springframework.boot.loader.launch.LaunchedClassLoader.loadClass(LaunchedClassLoader.java:91) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:467) at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:99) at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64) at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:40)

相关配置文件

pom.xml

<name>JavaBS</name>
<description>Demo project for Spring Boot</description>
<url/>
<licenses>
    <license/>
</licenses>
<developers>
    <developer/>
</developers>
<scm>
    <connection/>
    <developerConnection/>
    <tag/>
    <url/>
</scm>
<properties>
    <java.version>17</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-sync -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-sync</artifactId>
        <version>5.3.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-core -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-core</artifactId>
        <version>5.3.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
        <version>3.4.2</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.2</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
                  <configuration>
        <mainClass>package com.LearnBS.JavaBS.JavaBsApplication</mainClass>
        </configuration>
        <!--<configuration> -->   
            <!-- <mainClass>package com.LearnBS.JavaBS.JavaBsApplication</mainClass>-->
            <!--</configuration>-->
        </plugin>
    </plugins>
</build>

GitHub Action工作流文件

name: Maven Package

on:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
  contents: read
  packages: write
  id-token: write
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
  uses: actions/setup-java@v4
  with:
    java-version: '17'
    distribution: 'adopt'

- name: Build with Maven
  run: mvn clean install spring-boot:repackage

- name: Docker Login
  uses: azure/docker-login@v1
  with:
    login-server: aksfirstregistry.azurecr.io
    username: xxxxxxxxxxxxx
    password: bxxxxxxxxxxxxxxxxx
- name: Set up Docker Buildx
  uses: docker/setup-buildx-action@v3
  
- name: Build and Push to ACR
  uses: docker/build-push-action@v6
  with:
    context: . 
    push: true
    tags: aksfirstregistry.azurecr.io/g********:latest
    file: Dockerfile

# Logs in with your Azure credentials
- name: Log in to Azure
  uses: azure/login@v1
  with:
    creds: |
      {
        "clientId": xxxxxxxxxxxxxx,
        "clientSecret": xxxxxxxxxxxx,
        "tenantId": xxxxxxxxxxxx,
        "subscriptionId": xxxxxxxxxxxx;
      }
   
- name: Set AKS context
  id: set-context
  uses: azure/aks-set-context@v3
  with:
    resource-group: xxxxxxxxx
    cluster-name: xxxxxxxxxxx

- name: Setup kubectl
  id: install-kubectl
  uses: azure/setup-kubectl@v3

- name: Deploy to AKS
  id: deploy-aks
  uses: Azure/k8s-deploy@v4
  with:
    namespace: 'default'
    manifests: |
      gitmongodb.yaml
    images: aksfirstregistry.azurecr.io/gxxxxx:latest
    pull-images: false 

解决方案

  1. 修正pom.xml主类配置
    错误日志中显示找不到的类名是package com.LearnBS.JavaBS.JavaBsApplication,明显是pom.xml里spring-boot-maven-plugin的mainClass配置多了package关键字。正确的全限定类名不需要前缀package,修改如下:

    <configuration>
        <mainClass>com.LearnBS.JavaBS.JavaBsApplication</mainClass>
    </configuration>
    
  2. 简化Maven构建命令
    mvn clean install spring-boot:repackage可以简化为mvn clean package,因为Spring Boot Maven插件会在package阶段自动执行repackage操作,生成可执行jar包。

  3. 验证Dockerfile配置
    确保Dockerfile正确复制并启动jar包,示例配置如下:

    FROM openjdk:17-jdk-slim
    WORKDIR /app
    COPY target/JavaBS-*.jar app.jar
    ENTRYPOINT ["java", "-jar", "/app/app.jar"]
    

    注意jar包的路径和名称要和构建产物一致。

  4. 更新GitHub Action的镜像拉取配置
    将Deploy to AKS步骤中的pull-images: false改为pull-images: true,确保AKS拉取最新推送的镜像,避免使用旧的有问题的镜像缓存。

完成以上修改后,重新触发GitHub Action构建部署即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:26:01