将Java源代码编译为可执行的JAR文件是Java开发中的基本技能,它能够将多个类文件、资源文件和依赖项打包成一个独立的归档文件,便于分发和部署,本文将详细介绍从编写Java代码到生成可执行JAR文件的完整流程,包括手动编译、使用构建工具以及处理依赖项等关键步骤。

编写Java源代码与基本编译
需要编写一个包含main方法的Java类作为程序入口,创建一个名为HelloWorld.java的文件,内容如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
使用Java开发工具包(JDK)中的javac命令编译源代码,打开命令行工具,进入HelloWorld.java所在的目录,执行以下命令:
javac HelloWorld.java
编译成功后,会生成一个HelloWorld.class文件,如果项目包含多个类文件,可以一次性编译所有Java文件,例如使用javac *.java命令,需要注意的是,编译时需确保所有依赖的类都在类路径中,否则会报错。
创建可执行JAR文件
编译完成后,需要将.class文件打包成JAR文件,使用JDK中的jar命令可以创建JAR文件,基本的创建命令如下:
jar cvf HelloWorld.jar HelloWorld.class
c表示创建新的JAR文件,v表示显示详细输出,f指定JAR文件名,执行后,会在当前目录生成HelloWorld.jar文件,但此时直接双击运行JAR文件可能无法启动程序,因为缺少主类清单信息。
配置MANIFEST.MF文件
要让JAR文件可执行,需要在META-INF目录下创建MANIFEST.MF文件,并指定主类,首先创建一个文本文件MANIFEST.MF如下:

Main-Class: HelloWorld
注意:冒号后需有一个空格,且文件末尾需换行,然后使用jar命令将清单文件添加到JAR中:
jar cvfm HelloWorld.jar MANIFEST.MF HelloWorld.class
m选项用于指定清单文件。HelloWorld.jar已经可以通过java -jar HelloWorld.jar命令运行了。
处理多文件项目与依赖项
对于包含多个类文件的项目,手动编译和打包会变得复杂,可以使用jar命令的C选项切换目录,
mkdir -p com/example
javac -d . HelloWorld.java
jar cvfm HelloWorld.jar MANIFEST.MF -C com/example .
现代Java项目通常依赖第三方库,这些库需要被包含在JAR文件中,手动管理依赖项非常繁琐,推荐使用Maven或Gradle等构建工具。
使用Maven构建可执行JAR
Maven是一个流行的项目管理工具,能够自动处理编译、打包和依赖管理,创建一个pom.xml文件,配置项目信息和依赖:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 添加依赖项 -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
在项目根目录下执行mvn clean package命令,Maven会自动编译代码、下载依赖并生成可执行的JAR文件,通常位于target目录下。

使用Gradle构建可执行JAR
Gradle是另一种流行的构建工具,其配置文件为build.gradle。
plugins {
id 'java'
id 'application'
id 'com.github.johnrengelman.shadow' version '7.1.2'
}
group 'com.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
// 添加依赖项
}
application {
mainClass = 'com.example.HelloWorld'
}
执行gradle shadowJar命令,Gradle会生成一个包含所有依赖的“胖JAR”(Fat JAR),可以直接运行。
验证与运行JAR文件
生成JAR文件后,可以通过以下命令验证其内容:
jar tf HelloWorld.jar
该命令会列出JAR文件中的所有文件,使用java -jar HelloWorld.jar命令运行程序,如果配置正确,程序将输出预期结果。
常见问题与解决方案
- “主类未找到”错误:检查
MANIFEST.MF文件中的Main-Class路径是否正确,确保类名包含完整的包名。 - 依赖项缺失:使用构建工具管理依赖,或手动将依赖JAR文件添加到类路径中。
- 编码问题:确保源代码文件和清单文件使用UTF-8编码,避免中文乱码。
通过以上步骤,无论是简单的单文件项目还是复杂的多模块项目,都可以成功编译为可执行的JAR文件,手动编译适合学习原理,而构建工具则能大幅提高开发效率,是实际项目中的首选方案,掌握这些技能将有助于更好地管理和部署Java应用程序。


















