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

