• SpringBoot 的版本、打包、Maven


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

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

    1. <groupId>***groupId>
    2. <artifactId>***artifactId>
    3. <version>***version>
    4. <packaging>***packaging>

    groupId: 项目组 ID,定义当前 Maven 项目隶属的组织或公司,通常是唯一的。一般是项目所属公司或组织的网址或 URL 的反写,例如 net.biancheng.www。
    artifactId: 项目 ID,通常是项目的名称。
    version:版本。
    packaging:项目的打包方式,默认值为 jar。
    classifier:帮助定义构建输出的一些附属构件,不直接定义项目的classifier,由附加插件帮助生成。 

    3.3、Maven 依赖 

    1. <dependency>
    2. <groupId>javax.servletgroupId>
    3. <artifactId>servlet-apiartifactId>
    4. <version>2.5version>
    5. <scope>providedscope>
    6. dependency>

    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 子元素来添加需要聚合的模块的目录路径。

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <groupId>net.biancheng.wwwgroupId>
    6. <artifactId>RootartifactId>
    7. <version>1.0version>
    8. <packaging>pompackaging>
    9. <properties>
    10. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    11. <log4j.version>1.2.17log4j.version>
    12. <junit.version>4.9junit.version>
    13. <system.version>1.0system.version>
    14. <mysql.connector.version>5.1.18mysql.connector.version>
    15. <c3p0.version>0.9.1c3p0.version>
    16. properties>
    17. <dependencyManagement>
    18. <dependencies>
    19. <dependency>
    20. <groupId>log4jgroupId>
    21. <artifactId>log4jartifactId>
    22. <version>${log4j.version}version>
    23. dependency>
    24. <dependency>
    25. <groupId>junitgroupId>
    26. <artifactId>junitartifactId>
    27. <version>${junit.version}version>
    28. dependency>
    29. <dependency>
    30. <groupId>mysqlgroupId>
    31. <artifactId>mysql-connector-javaartifactId>
    32. <version>${mysql.connector.version}version>
    33. <scope>runtimescope>
    34. dependency>
    35. <dependency>
    36. <groupId>c3p0groupId>
    37. <artifactId>c3p0artifactId>
    38. <version>${c3p0.version}version>
    39. dependency>
    40. dependencies>
    41. dependencyManagement>
    42. <modules>
    43. <module>../App-Core-libmodule>
    44. <module>../App-Data-libmodule>
    45. <module>../App-UI-WARmodule>
    46. modules>
    47. project>

    3.9、Maven继承 

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

    1. 父模块 POM 配置
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0modelVersion>
    6. <groupId>net.biancheng.wwwgroupId>
    7. <artifactId>RootartifactId>
    8. <version>1.0version>
    9. <packaging>pompackaging>
    10. <dependencies>
    11. <dependency>
    12. <groupId>junitgroupId>
    13. <artifactId>junitartifactId>
    14. <version>4.9version>
    15. <scope>testscope>
    16. dependency>
    17. <dependency>
    18. <groupId>mysqlgroupId>
    19. <artifactId>mysql-connector-javaartifactId>
    20. <version>5.1.18version>
    21. <scope>runtimescope>
    22. dependency>
    23. <dependency>
    24. <groupId>c3p0groupId>
    25. <artifactId>c3p0artifactId>
    26. <version>0.9.1version>
    27. dependency>
    28. dependencies>
    29. project>
    30. 子模块 POM 配置
    31. <project xmlns="http://maven.apache.org/POM/4.0.0"
    32. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    33. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    34. <modelVersion>4.0.0modelVersion>
    35. <groupId>net.biancheng.wwwgroupId>
    36. <artifactId>App-Core-libartifactId>
    37. <version>1.0version>
    38. <parent>
    39. <groupId>net.biancheng.wwwgroupId>
    40. <artifactId>RootartifactId>
    41. <version>1.0version>
    42. <relativePath>../RootrelativePath>
    43. parent>
    44. <dependencies>
    45. <dependency>
    46. <groupId>log4jgroupId>
    47. <artifactId>log4jartifactId>
    48. <version>1.2.17version>
    49. dependency>
    50. dependencies>
    51. project>
  • 相关阅读:
    【Unity】导航基本组件:Nav Mesh Agent、Off Mesh Link、Nav Mesh Obstacle
    【python爬虫实战】用python爬百度搜索结果!2023.3发布
    强缓存和协商缓存
    application/octet-stream的问题
    自然语言处理 (NLP) 简介
    vue3使用ref和reactive
    MACOS查看硬盘读写量
    python爬虫之JS逆向——网页数据解析
    案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理
    Go(八)函数
  • 原文地址:https://blog.csdn.net/weixin_42679286/article/details/132857378