You need to enable JavaScript to run this app. 使用javac命令行编译Spring Boot应用报包不存在如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用javac命令行编译Spring Boot应用报包不存在如何解决

Spring Boot 命令行编译找不到依赖类 问题说明

我尝试通过命令行运行Spring Boot应用时,遇到了如下编译报错:

MigrationsApplication.java:3: error: package org.springframework.boot does not exist
import org.springframework.boot.SpringApplication;
                               ^
MigrationsApplication.java:4: error: package org.springframework.boot.autoconfigure does not exist
import org.springframework.boot.autoconfigure.SpringBootApplication;
                                             ^
MigrationsApplication.java:8: error: cannot find symbol
@SpringBootApplication
 ^
  symbol: class SpringBootApplication
MigrationsApplication.java:15: error: cannot find symbol
        SpringApplication.run(MigrationsApplication.class, args);
        ^
  symbol:   variable SpringApplication
  location: class MigrationsApplication
4 errors

该错误在执行javac MigrationsApplication.java命令编译项目时触发。

项目初始配置

初始pom文件

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.migrations</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Migrations</name>
    <description>Demonstration of some migrations</description>
    <properties>
        <java.version>15</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>4.3.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

项目主类代码

package com.migrations.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.IOException;

@SpringBootApplication
public class MigrationsApplication {

    public static void main(String[] args) {
        // 命令行传入run参数时执行应用启动
        SpringApplication.run(MigrationsApplication.class, args);

        // 命令行传入create参数时执行迁移文件生成逻辑(暂注释未启用)
        /*MigrationGenerator generator=new MigrationGenerator();
        try {
            generator.generateMigrationFile("TEST2");
        } catch (IOException e) {
            System.out.println("There was an error generating the file");
        }*/
    }
}

其他操作异常

操作过程中还遇到IDE弹出「错误:选择运行/调试配置」的提示,同时附带两张界面参考图:运行配置报错界面、项目结构展示界面。
核心疑问点包括:

  • 上述编译报错该如何解决
  • 是否是从Spring Initializr导入项目的方式存在问题
  • 是否是本地未安装Maven导致了当前报错

调整后的项目配置

更新后的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.migrations</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>MigrationsApp</name>
    <description>Migrations</description>
    <properties>
        <java.version>15</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>4.3.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.company.common</groupId>
            <artifactId>common-files</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <mainClass>${start-class}</mainClass>
                </configuration>

                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>migrations.MigrationsAppApplication</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>assemble-all</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

调整pom配置后操作仍出现新的编译报错,对应界面截图已作为问题附件留存。

问题排查与解决方案

  • 核心报错根因:直接使用javac命令编译单个Java源文件时,javac工具不会自动加载Maven项目中配置的依赖Jar包,无法识别org.springframework.boot下的相关类,这和项目导入方式、Maven是否安装没有直接关联。
  • 正确编译运行流程:
    1. 确保本地配置好JDK环境,在pom.xml所在的项目根目录执行Maven命令完成构建,不要直接在源码目录下调用javac编译单文件
    2. 执行mvn clean compile完成项目源码编译,该命令会自动加载pom中配置的所有依赖到编译类路径,不会出现类找不到的问题
    3. 执行mvn spring-boot:run即可直接启动Spring Boot应用,无需手动编译单个文件
  • IDE运行配置报错解决:
    • 在IDE中选择「导入现有Maven项目」,直接加载项目根目录下的pom.xml,让IDE自动识别Maven依赖和项目结构,不要手动新建空项目后粘贴源码
    • 等待IDE完成Maven依赖下载和索引构建后,找到主类MigrationsApplication,右键选择运行即可,IDE会自动生成匹配的运行配置
  • 调整后pom的配置问题修正:
    1. 解决Java版本配置冲突:pom中同时设置了java.version=15和maven.compiler.source/target=1.8,两个配置会产生冲突,根据本地实际使用的JDK版本统一即可
    2. 修正打包插件的主类路径:当前maven-assembly-plugin配置的主类路径为migrations.MigrationsAppApplication,和实际项目的主类全路径com.migrations.demo.MigrationsApplication不匹配,会导致打包后无法找到启动类
    3. 检查自定义依赖可用性:com.company.common:common-files属于企业内部自定义依赖,需要确保本地Maven仓库或公司私服中已存在该依赖,否则会出现依赖拉取失败的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 02:36:04