0

0

Java如何编译_Java程序编译的多种实现方式

畫卷琴夢

畫卷琴夢

发布时间:2026-01-22 09:26:02

|

876人浏览过

|

来源于php中文网

原创

java编译核心是将.java转为.class字节码,可用javac、ide或maven/gradle;需注意-source/-target匹配、类路径、包结构、构建工具配置及注解处理器集成。

java如何编译_java程序编译的多种实现方式

Java 程序编译的核心就是把 .java 源文件转换成 JVM 能执行的 .class 字节码,这件事不一定要用 javac 命令手动敲——但绝大多数情况下,你得先搞清楚它默认怎么工作,否则其他方式容易出错。

javac 命令行编译:最基础也最容易翻车

这是 JDK 自带的标准编译器,路径在 $JAVA_HOME/bin/javac。它看似简单,但几个参数稍不注意就导致类找不到或版本不兼容:

  • -source-target 必须匹配——比如用 JDK 17 编译却加了 -source 8 -target 8,生成的字节码能跑,但若用了 varswitch 表达式就会报错
  • 类路径(-cp-classpath)只影响编译期查依赖,不影响运行;漏掉第三方 .jar 会导致 cannot find symbol
  • 包结构必须和目录结构严格一致:声明 package com.example; 就得放在 com/example/MyClass.java 路径下,否则 javacclass is public and must be declared in a file named
  • 多个源文件一起编译时,不用显式列全,用 javac com/example/*.java 更稳,避免遗漏内部类生成的 $ 文件

IDE 内置编译器(IntelliJ / Eclipse):自动但不透明

它们默认不调用系统 javac,而是用自己的增量编译引擎(如 IntelliJ 的 javac fork 或 Eclipse JDT Compiler),好处是快、支持实时错误提示,坏处是行为可能和命令行不一致:

  • IntelliJ 默认启用 Build project automatically,但不会重新编译被删掉的 .class 文件,残留旧字节码可能引发 NoClassDefFoundError
  • Eclipse 的编译器对泛型擦除更宽松,某些在 javac 下报错的代码(如模糊的类型推断)可能通过,上线后运行时报 ClassCastException
  • 务必检查 IDE 的 Project SDKLanguage level 是否与 pom.xmlbuild.gradle 里声明的一致,否则编译通过、打包失败

Maven / Gradle 编译:工程化场景的实际标准

真正项目里几乎没人手敲 javac,而是靠构建工具统一管理源码位置、依赖和 Java 版本:

B2S商城系统
B2S商城系统

B2S商城系统B2S商城系统是由佳弗网络工作室凭借专业的技术、丰富的电子商务经验在第一时刻为最流行的分享式购物(或体验式购物)推出的开源程序。开发采用PHP+MYSQL数据库,独立编译模板、代码简洁、自由修改、安全高效、数据缓存等技术的应用,使其能在大浏览量的环境下快速稳定运行,切实节约网站成本,提升形象。注意:如果安装后页面打开出现找不到数据库等错误,请删除admin下的runtime文件夹和a

下载

立即学习Java免费学习笔记(深入)”;

  • Maven 默认从 src/main/java 编译,用 maven-compiler-plugin 控制 JDK 版本:<source>17</source><target>17</target> 必须同时设,只设一个可能被忽略
  • Gradle 中 java { sourceCompatibility = JavaVersion.VERSION_17 } 只控制语法检查,真正字节码版本由 compileJava.options.release = 17 决定(推荐用 release 而非 target,它会禁用跨版本 API)
  • 多模块项目中,子模块编译依赖父模块的 target/classes,不是 jar 包——所以 mvn compile 不会触发 install,本地修改父模块后要先 mvn compile 再编译子模块,否则报 symbol not found

注解处理器(APT)和编译期代码生成:编译不只是翻译

像 Lombok、MapStruct、Dagger 这类工具,是在 javac 编译过程中插入处理器,动态生成代码。这阶段出问题往往没有明确错误提示,只有运行时报空指针或类不存在:

  • Lombok 需要在 IDE 插件 + 编译插件(如 lombok-maven-plugin)两端都启用,缺一不可;Gradle 中还要加 annotationProcessor 'org.projectlombok:lombok'
  • 自定义注解处理器必须在 META-INF/services/javax.annotation.processing.Processor 里声明全限定名,否则 javac -processor 找不到它
  • 处理器生成的源码默认放在 target/generated-sources/annotations,Maven 要用 build-helper-maven-plugin 把该路径加入编译源目录,否则编译失败

编译不是黑盒流水线,尤其当涉及 APT、多模块或 IDE 与构建工具混用时,javac 的输出路径、类路径、目标版本这三个变量一旦错位,错误现象就可能分散在编辑器报红、编译成功但运行失败、CI 构建通过但本地失败等不同环节——盯住 javac -verbose 或 Maven 的 -X 日志,比猜更快。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
eclipse教程
eclipse教程

php中文网为大家带来eclipse教程合集,eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。php中文网还为大家带来eclipse的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

194

2023.06.14

eclipse怎么设置中文
eclipse怎么设置中文

eclipse设置中文的方法:除了设置界面为中文外,你还可以为Eclipse添加中文插件,以便更好地支持中文编程。例如,你可以安装EBNF插件来支持中文变量名,或安装Chinese Helper来提供中文帮助文档。本专题为大家提供eclipse设置中文相关的各种文章、以及下载和课程。

806

2023.07.24

c语言编程软件有哪些
c语言编程软件有哪些

c语言编程软件有GCC、Clang、Microsoft Visual Studio、Eclipse、NetBeans、Dev-C++、Code::Blocks、KDevelop、Sublime Text和Atom。更多关于c语言编程软件的问题详情请看本专题的文章。php中文网欢迎大家前来学习。

623

2023.11.02

Eclipse版本号有哪些区别
Eclipse版本号有哪些区别

区别:1、Eclipse 3.x系列:Eclipse的早期版本,包括3.0、3.1、3.2等;2、Eclipse 4.x系列:Eclipse的最新版本,包括4.0、4.1、4.2等;3、Eclipse IDE for Java Developers等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2024.02.23

eclipse和idea有什么区别
eclipse和idea有什么区别

eclipse和idea的区别:1、平台支持;2、内存占用;3、插件系统;4、智能代码提示;5、界面设计;6、调试功能;7、学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

152

2024.02.23

eclipse设置中文全教程
eclipse设置中文全教程

本专题整合了eclipse设置中文相关教程,阅读专题下面的文章了解更多详细操作。

116

2025.10.10

eclipse字体放大教程
eclipse字体放大教程

本专题整合了eclipse字体放大教程,阅读专题下面的文章了解更多详细内容。

154

2025.10.10

eclipse左边栏不见了解决方法
eclipse左边栏不见了解决方法

本专题整合了eclipse左边栏相关教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号