运行jar包相关
# 运行jar包相关
# jar和war的区别
# 定义和用途
JAR包 是一种通用的压缩格式,用于分发Java类文件和与之相关的元数据和资源。
WAR包 专用于Web应用程序,包含Servlet、JSP、HTML、JavaScript等网页相关文件。
# 文件结构和内容
JAR包 通常包含.class文件和应用程序库,以及配置文件如MANIFEST.MF。
WAR包 结构更为复杂,包括WEB-INF目录下的web.xml部署描述符、类文件、库文件等。
# 部署和使用环境
JAR包 可以在任何Java环境中使用,常见于桌面、服务器端应用。
WAR包 需要部署在支持Servlet和JSP的Web服务器或应用服务器上。
# 使用场景和应用类型
JAR包 适用于任何标准Java应用,如控制台应用、桌面应用或通用库。
WAR包 专为Web应用设计,适用于需要Web界面的项目。
# 总结
- JAR 文件:适用于打包 Java 类库和独立的 Java 应用程序。
- WAR 文件:适用于打包 Web 应用程序,部署在应用服务器上。
# 通过参数运行jar
# 指定端口
假设你的 JAR 包名为 app.jar
,你可以使用以下命令来指定应用的运行端口,如: --server.port
参数来指定。
java -jar app.jar --server.port=8081
在这个例子中,--server.port=8081
参数告诉 Spring Boot 将应用的端口设置为 8081。
# springboot的jar为何能直接运行
如果我们要把Spring Boot (Spring Boot)应用打包成一个可运行的Jar (Jar)包,需要依赖官方提供的一个spring-boot-maven-plugin
的插件。
如果,我们去掉spring-boot-maven-plugin插件,通过 mvn clean package 再打一次包。
打包依然会成功,包名也一样,但这时候你会发现,jar包的大小有着天壤之别,你会发现它很小(比如:只有3KB,之前的有17.7MB)。此外,我们通过java -jar 包名
看能否启动成功,结果你会发现根本启动不了。
下列是对应的pom坐标
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.12</version>
</plugin>
</plugins>
</build>
2
3
4
5
6
7
8
9
下面是主要的实现步骤:
1.SpringBoot提供了一个插件spring-boot-maven-plugin
用于把程序打包成一个可执行的jar包。
2.Spring Boot应用打包之后,生成一个Fat jar(jar包中包含jar),包含了应用依赖的jar包和Spring Boot loader相关的类
3.java -jar会去找jar中的manifest文件,在那里面找到真正的启动类;
4.Fat jar的启动Main函数是JarLauncher,它负责创建一个LaunchedURLClassLoader来加载bootib下面的jar,并以一个新线程启动应用的Main函数。
# 普通的jar
普通的jar,加压后,就只是一些代码和字节码文件