SpringBoot 的版本、打包、Maven
作者:mmseoamin日期:2023-12-25

一、SpringBoot 结构、集成 

1.1、集成组件 

Spring Core:Spring的核心组件,提供IOC、AOP等基础功能,是Spring全家桶的基础。

Spring Boot:一个基于Spring Framework的快速开发框架,可以快速创建独立的、生产级别的Spring应用程序。

Spring Cloud:一个用于构建分布式应用程序的框架,提供了诸如服务发现、配置管理、负载均衡等功能。

Spring Data:用于简化数据访问层开发的框架,提供了一系列数据访问模板和持久化技术的集成。

Spring Security:一个用于处理应用程序安全的框架,提供了认证、授权、安全防护等功能。

Spring Integration:Spring Integration是一个用于构建企业级集成解决方案的框架,支持将不同的应用程序和服务集成到一起。它提供了许多组件和模式,如消息通道、消息端点、消息路由器、过滤器等。

Spring Batch:Spring Batch是一个用于处理大量数据和批处理作业的框架。它提供了各种工具和组件,如任务启动器、作业仓库、作业执行器、步骤处理器、读写器等。

Spring Web Services:Spring Web Services是一个用于构建基于SOAP协议的Web服务的框架。它提供了各种组件和工具,如消息处理器、绑定器、端点等,使得构建Web服务更加容易。

二、SpringBoot 版本相关问题 

Spring Boot 2X 

Spring Boot 2.0在2018年2月28日发布,Spring Boot 2.7是2.x的最后一个发布版本最后一个支持 JDK 8 的版本,该版本的开源将于2023年11月停止支持,商业支持可延长到2025年2月。

Spring Boot 3X 

Spring Boot 3.0于2022年11月24日发布,它是Spring Boot的下一个大版本,基于Spring Framework 6.0,而且要求Java最低版本为Java17。

Spring Framework 6.0于2022年11月16日发布,是Spring Framework的下一个大版本,该版本要求Java最低版本为Java17。

三、jar 包 与 war包

SpringBoot 打包区别

3.1、jar包

jar包是java项目压缩包,通过java程序(JavaSE)压缩产生的压缩包。

3.1.1、jar包目录结构

根目录

   |

   |---- 该包的 java 类文件目录

   |

   |---- META-INF 目录          // 存放该包和扩展的配置数据

3.1.2、jar包的启动

#1、直接启动: java -jar demo.jar
这种启动方式适合自己测试,部署在Linux上,关闭会话窗口或者ctrl+c都会关闭Java
#2、后台启动:java -jar demo.jar &
这种方式会在后台静默运行,关闭会话窗口会中断Java,和上一种一样,这两个日志都是打印在窗口的,关闭会话就没了
#3、nohup启动:nohup java -jar demo.jar &
这种会把日志打印到nohup.out文件中,但只会打印标准输出不会打印错误输出,关闭通过pid号来kill掉
#4、nohup启动:nohup java -jar demo.jar>/root/demo.log 2>&1 &
这种会把普通输出和错误输出都打印到demo.log中
#5、需要打印控制台日志,需要保留之前的日志信息
nohup java -jar test.jar >>  ./info.log &

3.2、war包

web项目压缩包,可直接运行的web模块,部署到Web容器(如 tomcat)中。
war包 包含项目所东西:

    代码编译成的 class 文件 

    依赖包 

    配置文件 

    网站页面(html、jsp、servlet、图片文件等)

3.2.1、war包目录结构

war包放在tomcat的\webapps\ 目录下,启动 Tomcat,war包就会自动解压运行。

3.2.2、war包的启动

根目录

   |

   |---- .html、.jsp (或包含这两种文件的目录)

   |

   |---- WEB-INF 目录           // 存放 .class 文件和配置文件

   |        |

   |        |---- web.xml       // 该应用的配置文件

   |        |

   |        |---- classes 目录

   |        |         |

   |        |         |---- 编译好的 servlet 类和 js

   |        |         |

   |        |         |---- servlet 所依赖的其他类(如 JavaBean)

   |        |----- lib          // 存放该包的依赖 jar 包

   |

   |---- META-INF 目录          // 存放该包和扩展的配置数据

三、Maven

Maven 基于 Java 的项目管理工具。

3.1、Maven目录及文件

helloMaven:项目名,包含 src 文件夹和 pom.xml。

src/main/java:用于存放项目的 Java 文件。

src/main/resources:用于存放项目资源文件。

src/test/java:用于存放所有测试 Java 文件,如 JUnit 测试类。

src/test/resources :用于存放测试资源文件。

target:项目输出位置,用于存放编译后的文件。

pom.xml:Maven 项目核心配置文件。

3.2、Maven 坐标

唯一的字符串,表示资源。

***
***
***
***

groupId: 项目组 ID,定义当前 Maven 项目隶属的组织或公司,通常是唯一的。一般是项目所属公司或组织的网址或 URL 的反写,例如 net.biancheng.www。

artifactId: 项目 ID,通常是项目的名称。

version:版本。

packaging:项目的打包方式,默认值为 jar。

classifier:帮助定义构建输出的一些附属构件,不直接定义项目的classifier,由附加插件帮助生成。 

3.3、Maven 依赖 


	javax.servlet
	servlet-api
	2.5
	provided

groupId、artifactId 和 version:依赖的基本坐标,任何一个依赖基本坐标是最重要的,Maven 根据坐标找到需要的依赖。

type:依赖的类型,对应于项目坐标定义的 packaging。大部分情况下,该元素不必声明,其默认值是 jar。
scope:依赖的范围。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。

Maven的依赖范围 

compile:编译依赖范围,默认的。编译、测试、运行的时候都要用到这个依赖。

test:测试依赖范围。只有在编译测试代码 + 运行测试代码的时候才需要;

provided:已提供依赖范围。编译和测试时使用,运行时无效;

runtime:运行时依赖范围。测试和运行时有效,编译主代码时无效;

system:系统依赖范围。与provided一致,与本机是强绑定,会导致不可移植,慎用,systemPath中可以引用环境变量。

import:导入依赖范围。

3.4、Maven的常用命令 

mvn clean:清理

mvn compile:编译src/main/java目录中的程序,把Java编程成class文件,并放到target/classes目录中

mvn test-compile:编译src/main/test目录下的Java程序,拷贝到target/test-class目录中

mvn test:进行单元测试,使用Junit测试src/main/java目录下的程序是否符合要求

mvn package:打包。把程序中src/main/test下面的Java编译后的class和resources中的配置文件放入到一个压缩包中。

mvn install:把jar、war安装到本机仓库中

3.5、仓库 

存放物品:存放Jar、Maven的插件等等。

本地仓库,可以在maven安装目录/conf/settings.xml中指定。

中央仓库:最权威的,所有的资源都放在这里。

中央仓库的镜像:分担压力的。

私服:公司局域网内部使用的,就是公司自己开发的。

3.6、Maven的生命周期 

项目的构建过程:清理、编译、测试、报告、打包、安装、部署

3.7、插件 

Maven提供的功能,用来执行清理、编译、测试、报告、打包的程序。

生命周期与插件

3.8、Maven聚合 

要在项目中额外创建一个聚合模块,通过这个模块构建整个项目的所有模块。

助聚合其他模块的工具,其本身并无任何实质内容,因此聚合模块中只有一个 POM 文件。

聚合模块的打包方式(packaging)也是 pom,用户可以在其 POM 中通过 modules 下的 module 子元素来添加需要聚合的模块的目录路径。


    4.0.0
    net.biancheng.www
    Root
    1.0
    
    pom
    
        
        UTF-8
        1.2.17
        4.9
        1.0
        5.1.18
        0.9.1
    
    
    
    
        
            
                log4j
                log4j
                
                ${log4j.version}
            
            
                junit
                junit
                
                ${junit.version}
                
            
            
                mysql
                mysql-connector-java
                
                ${mysql.connector.version}
                runtime
            
            
                c3p0
                c3p0
                
                ${c3p0.version}
            
        
    
    
    
        ../App-Core-lib
        ../App-Data-lib
        ../App-UI-WAR
    

3.9、Maven继承 

在父模块 POM 中声明依赖,其他模块的 POM 可通过继承父模块的 POM 来获得对相关依赖的声明。消除子模块 POM 中的重复配置,父模块 POM 的打包类型(packaging)必须是 pom。

父模块 POM 配置

    4.0.0
    net.biancheng.www
    Root
    1.0
    
    pom
	
    
        
            junit
            junit
            4.9
            test
        
        
            mysql
            mysql-connector-java
            5.1.18
            runtime
        
        
            c3p0
            c3p0
            0.9.1
        
    

子模块 POM 配置

    4.0.0
    net.biancheng.www
    App-Core-lib
    1.0
	
    
        net.biancheng.www
        Root
        1.0
        ../Root
    
	
    
        
            log4j
            log4j
            1.2.17