跳至主要內容

Java 文件后缀全解析

Mr.Dingjava项目结构编译构建JVM大约 4 分钟约 1298 字

Java 文件后缀全解析

一图概览

                      Java 项目文件生态
                ┌────────────────────────────┐
                │  源代码 (.java)              │
                │      ↓ javac 编译             │
                │  字节码 (.class)              │
                │      ↓ 打包                   │
                │  ┌─────┴──────┐              │
                │  │ .jar       │ .war         │
                │  └─────┬──────┘              │
                │        ↓                      │
                │  Java -jar  /  Tomcat 启动    │
                └────────────────────────────┘
                           +
                ┌────────────────────────────┐
                │  构建配置                   │
                │  pom.xml (Maven)           │
                │  build.gradle (Gradle)     │
                │  application.yml           │
                └────────────────────────────┘

1. .java — 源代码文件

// Hello.java — 一个 .java 文件包含一个 public 类
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}
要点说明
命名规则public class 名称必须和文件名一致
编译命令javac Hello.java → 生成 Hello.class
运行命令java Hello(不需要 .class 后缀)
一个文件几个类只能有一个 public class,可以有多个非 public 类

前端理解.java.ts / .js 源文件,需要编译后才能运行。


2. .class — 编译后的字节码

# 编译过程(类似 tsc / babel)
javac Hello.java

# 生成 Hello.class(二进制字节码)
┌─────────────────────────────────────────┐
│            Java 源码 → 运行              │
│                                         │
│  Hello.java  ──javac──→  Hello.class     │
│  (.java 源码)         (.class 字节码)    │
│                             │            │
│                             ↓ jvm       │
│                         运行结果          │
└─────────────────────────────────────────┘
要点说明
内容JVM 字节码(二进制,不是文本)
运行java Hello → JVM 加载 Hello.class
反编译javap -c Hello.class 可反编译查看字节码
特点跨平台(一次编译,到处运行)

前端理解.class.js(编译产物)。javac 编译 ≈ tsc / babel 编译。


3. .jar — Java 项目打成的包(≈ npm 包)

JAR = Java ARchive,本质是一个 ZIP 格式 的压缩包。

# 查看 jar 内容(类似查看 zip)
jar tf my-app.jar

# 解压
jar xf my-app.jar

# 结构示例
my-app.jar
├── META-INF/
│   └── MANIFEST.MF      # 清单文件(入口类、版本等)
├── com/
│   └── example/
│       ├── Main.class
│       ├── User.class
│       └── UserService.class
└── application.yml       # 配置文件(解压后可见)
<!-- Maven 打包(在 pom.xml 目录执行) -->
<!-- 生成 target/my-app-1.0.0.jar -->
# 运行 jar
java -jar my-app-1.0.0.jar

# 如果 MANIFEST.MF 中没有 Main-Class 声明,需要手动指定入口
java -cp my-app-1.0.0.jar com.example.Main

MANIFEST.MF 内容

Manifest-Version: 1.0
Main-Class: com.example.MainApplication    # 程序入口
Class-Path: lib/dependency1.jar lib/dependency2.jar  # 依赖

前端理解.jarnpm pack 产出的 .tgz 包,或 webpack 打包后的 dist/ 文件夹压缩。


4. .war — Web 应用包(≈ 前端构建后的 dist)

WAR = Web Application Archive,专门给 Web 容器(Tomcat、Jetty)用的。

# Maven 打 war 包
# 在 pom.xml 中设置 <packaging>war</packaging> 即可
my-app.war
├── META-INF/
├── WEB-INF/
│   ├── web.xml                # Web 应用配置(Servlet 配置)
│   ├── classes/               # 编译后的 .class 文件
│   │   └── com/example/*.class
│   └── lib/                   # 依赖的 jar 包
│       ├── spring-core.jar
│       └── mysql-connector.jar
├── index.html                 # 前端静态资源
├── css/
├── js/
└── images/
特性JARWAR
用途普通 Java 应用 / 库Web 应用(部署到 Tomcat)
内置服务器❌ 自己启动 main✅ 由 Tomcat/Jetty 管理
前端资源❌ 不包含✅ 包含 HTML/CSS/JS
运行方式java -jar丢到 Tomcat 的 webapps/ 目录
现代趋势Spring Boot 用 JAR(内嵌 Tomcat)传统方式

前端理解.war ≈ 前端构建产物 dist/ 整个文件夹,但还包含了后端代码和依赖。


5. pom.xml — Maven 构建配置(≈ package.json)

<project>
    <!-- 项目坐标(≈ name + version) -->
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>    <!-- jar / war / pom -->

    <!-- 依赖管理(≈ dependencies) -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>3.2.0</version>
        </dependency>
    </dependencies>

    <!-- 构建插件(≈ devDependencies / 构建工具) -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
前端文件Maven 对应
package.jsonpom.xml
package-lock.json(无直接对应,用版本管理)
node_modules/~/.m2/repository/(本地仓库)
npm installmvn dependency:resolve
npm run buildmvn package

6. build.gradle — Gradle 构建配置

// Gradle 用 Groovy/Kotlin DSL,比 Maven XML 更简洁
plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.0'
    id 'io.spring.dependency-management' version '1.1.4'
}

group = 'com.example'
version = '1.0.0'

repositories {
    mavenCentral()      // 仓库(≈ npm registry)
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.mysql:mysql-connector-j'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
对比MavenGradle
配置语言XMLGroovy / Kotlin DSL
构建速度快(增量编译 + 缓存)
学习成本低(XML 易懂)中(需要学 DSL)
市场份额老项目为主新项目为主

前端理解:Maven ≈ npm(稳定、成熟),Gradle ≈ pnpm(快、现代化)。


7. .properties — 属性配置文件

# application.properties (Spring Boot)
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/my_app
spring.datasource.username=root
spring.datasource.password=123456
# 同等的 application.yml(更推荐,层级清晰)
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/my_app
    username: root
    password: 123456
格式特点前端类比
.properties纯键值对,无层级类似 .env
.yml / .yaml层级结构,可读性好类似 tsconfig.json 但不用 {}
.xml标签式,功能强大但啰嗦类似 package-lock.json(自动生成)

8. IDE 相关文件

# .iml — IntelliJ IDEA 模块文件(自动生成)
# 类似前端的 .vscode/settings.json
# 不要提交到 Git!
<!-- .classpath — Eclipse 类路径文件 -->
<!-- 类似前端的 .editorconfig / tsconfig.json 的路径配置 -->
文件IDE说明
.imlIntelliJ IDEA模块配置(自动生成)
.classpathEclipse类路径配置
.projectEclipse项目配置
.idea/IntelliJ IDEAIDE 配置目录(不要提交)
.vscode/VS Code前端熟悉,Java 也可用

.gitignore中要忽略的.idea/*.iml.classpath.project.settings/target/(构建产物)、*.class


后缀速查表

后缀类型运行/使用方式前端类比
.java源代码javac 编译.ts / .jsx
.class字节码由 JVM 加载.js(编译产物)
.jar应用/库包java -jar.tgz npm 包
.warWeb 应用丢 Tomcatdist/ 构建产物
.pom.xmlMaven 配置Maven 构建package.json
.gradleGradle 配置Gradle 构建pnpm-workspace.yaml
.properties属性配置程序读取.env
.yml / .yamlYAML 配置程序读取层级配置文件
.xml通用标记语言配置/数据package-lock.json
.imlIDEA 模块IDE 自动生成.vscode/settings.json
.classpathEclipse 配置IDE 自动生成.vscode/launch.json
.mvnMaven Wrapper无需安装 Maven类似 .nvmrc
.jsp动态网页Tomcat 解析ejs / pug 模板
上次编辑于:
贡献者: dingyongya