启动JAVA
启动JAVA
直接类启动
# 当你不指定 -cp 时,JVM 使用:
java com.example.Main
# 等效于:只包含当前目录,不包含其他 JAR!
java -cp . com.example.Main
JAR 包启动
java -jar app.jar 执行的是 JAR 包中 META-INF/MANIFEST.MF 文件里指定的 Main-Class!
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: Game-Dev-Team
Created-By: Apache Maven 3.8.1
Build-Jdk: 11.0.12
Specification-Title: Game Server Application
Implementation-Title: game-server
Implementation-Version: 1.0.0
Implementation-Vendor-Id: com.test.mu
Main-Class: com.test.mu.start.GameStartup # 执行 GameStartup.main() 方法
Class-Path: lib/network-1.2.0.jar lib/database-2.1.0.jar lib/utils-0.9.0.jar
META-INF/MANIFEST.MF 通常是打包工具自动生成的!
如果不做任何配置,构建工具会生成一个基本的 MANIFEST.MF:
Manifest-Version: 1.0
Created-By: 11.0.12 (Oracle Corporation)
但这样的 JAR 不能使用 java -jar 运行,因为没有 Main-Class!
java -jar app.jar
↓
JVM 读取 META-INF/MANIFEST.MF
↓
找到 Main-Class: com.test.mu.start.GameStartup
↓
加载并执行 GameStartup.main(String[] args)
类路径
java -cp "lib/*:." com.mycompany.Main
## java
# Java 运行时启动命令
## -cp "lib/*:."
# -cp = classpath 的缩写,指定类路径
## "lib/*" = lib 目录下的所有 JAR 文件
## : = 类路径分隔符(Linux/Unix 系统)
## :. = 当前目录(包含编译的 .class 文件)
## Main 要执行的主类名(不需要 .class 后缀) 例如:com.mycompany.Main
例子
java -Xmx512m com.test.mu.start.GameStartup ${ROOT}/conf/config.properties > ${ROOT}/log.txt 2>&1 &
# 分解来看:
java \ # 启动JVM
-Xmx512m \ # 分配最大512MB堆内存
com.test.mu.start.GameStartup \ # 执行这个主类
${ROOT}/conf/config.properties \ # 配置文件路径参数
> ${ROOT}/log.txt \ # 标准输出重定向到日志文件
2>&1 \ # 标准错误也重定向到同一文件
& # 后台运行
#java com.test.mu.start.GameStartup = 执行 GameStartup.main() 方法
# 后面的参数 ${ROOT}/conf/config.properties = 传递给 main 方法的 String[] args 参数
启动方式总结
Java 应用的启动方式非常丰富:
| 启动方式 | 适用场景 | 示例命令 |
|---|---|---|
| 直接类 | 简单应用 | java com.example.Main |
| JAR 包 | 标准部署 | java -jar app.jar |
| 类路径 | 复杂依赖 | java -cp "lib/*:." Main |
| 模块化 | Java 9+ | java --module-path mods -m module/main |
| Spring Boot | 微服务 | java -jar app.jar --profile=prod |
| 调试模式 | 开发调试 | java -agentlib:jdwp ... -jar app.jar |
| 性能调优 | 生产环境 | java -Xmx2g -XX:+UseG1GC -jar app.jar |
| Docker | 容器化 | docker run java -jar app.jar |
浙公网安备 33010602011771号