1. 概述
WAR文件(Web Application Archive)是Java Web应用的归档格式,用于打包Web应用的所有资源。它将Web组件(如Servlet、JSP)和静态资源整合为单一单元,包含JAR文件、Java类文件、XML配置、HTML页面等。
本文将介绍如何通过命令行调用WAR文件中的Java类。
2. WAR文件的结构
WAR文件使用.war扩展名,可部署在任何Servlet/JSP容器上。
典型WAR文件结构示例:
META-INF/
MANIFEST.MF
WEB-INF/
web.xml
jsp/
helloWorld.jsp
classes/
com/baeldung/*.class
application.properties
static/
templates/
lib/
// 第三方库文件(*.jar)
index.html
关键目录说明:
META-INF
:私有目录,包含归档元信息(如MANIFEST.MF)WEB-INF
:特殊目录,包含:classes
:存放编译后的Java类文件lib
:存放依赖的JAR库web.xml
:部署描述符
- 根目录:静态资源(HTML、图片等)
3. 运行WAR文件中的类
3.1. 使用java命令的-classpath选项
JVM通过classpath定位和加载类,它指定了类文件的搜索路径(目录/JAR/ZIP文件)。
执行命令示例(Linux/macOS语法):
java -classpath target/maven-generate-war/WEB-INF/classes:target/maven-generate-war/WEB-INF/lib/* com.baeldung.MavenGenerateWarApplication
⚠️ 路径分隔符说明:
- Linux/macOS:冒号(:)
- Windows:分号(;)
3.2. 使用java命令的-jar选项
Spring Boot构建的WAR文件可包含嵌入式服务器(如Tomcat),无需外部Servlet容器即可运行。
前提条件:在pom.xml
中指定了主类(如MavenGenerateWarApplication
)。
执行命令:
java -jar target/war-with-main-class.war
输出示例:
2025-01-26 01:25:19.762 INFO 99652 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-01-26 01:25:19.763 INFO 99652 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.74]
2025-01-26 01:25:20.256 INFO 99652 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-01-26 01:25:20.256 INFO 99652 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1009 ms
2025-01-26 01:25:20.378 INFO 99652 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page template: index
2025-01-26 01:25:20.450 INFO 99652 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2025-01-26 01:25:20.455 INFO 99652 --- [ main] c.baeldung.MavenGenerateWarApplication : Started MavenGenerateWarApplication in 1.575 seconds (JVM running for 1.834)
✅ 优势:启动嵌入式服务器,保持应用持续运行
4. 结论
两种方案对比:
场景 | 推荐方案 | 特点 |
---|---|---|
现代Web应用(嵌入式服务器) | java -jar |
✅ 简单粗暴,包含完整运行环境 |
非Web组件/工具类 | java -classpath |
✅ 无需Servlet容器,轻量级 |
踩坑提醒:
- 确保classpath包含所有依赖(尤其
WEB-INF/lib/*
) - 主类路径需与实际包结构一致(如
com.baeldung.Xxx
) - Windows用户注意路径分隔符使用分号(;)