SpringBoot 的版本、打包、Maven

news2024/12/23 12:01:18

一、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>***</groupId>
<artifactId>***</artifactId>
<version>***</version>
<packaging>***</packaging>

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

3.3、Maven 依赖 

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>servlet-api</artifactId>
	<version>2.5</version>
	<scope>provided</scope>
</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 子元素来添加需要聚合的模块的目录路径。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>Root</artifactId>
    <version>1.0</version>
    <!--定义的父类pom.xml 打包类型使pom -->
    <packaging>pom</packaging>
    <properties>
        <!-- 定义一些属性 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <log4j.version>1.2.17</log4j.version>
        <junit.version>4.9</junit.version>
        <system.version>1.0</system.version>
        <mysql.connector.version>5.1.18</mysql.connector.version>
        <c3p0.version>0.9.1</c3p0.version>
    </properties>

    <!--dependencyManagement 标签用于控制子模块的依赖版本等信息 -->
    <!-- 该标签只用来控制版本,不能将依赖引入 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <!--引用的properties标签中定义的属性 -->
                <version>${log4j.version}</version>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <!--引用的properties标签中定义的属性 -->
                <version>${junit.version}</version>
                <!-- <scope>test</scope> -->
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <!--引用的properties标签中定义的属性 -->
                <version>${mysql.connector.version}</version>
                <scope>runtime</scope>
            </dependency>

            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <!--引用的properties标签中定义的属性 -->
                <version>${c3p0.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--添加需要聚合的模块-->
    <modules>
        <module>../App-Core-lib</module>
        <module>../App-Data-lib</module>
        <module>../App-UI-WAR</module>
    </modules>
</project>

3.9、Maven继承 

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

父模块 POM 配置
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>Root</artifactId>
    <version>1.0</version>
    <!--定义的父类 POM 打包类型使pom  -->
    <packaging>pom</packaging>
	
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1</version>
        </dependency>
    </dependencies>
</project>


子模块 POM 配置
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>App-Core-lib</artifactId>
    <version>1.0</version>
	
    <parent>
        <groupId>net.biancheng.www</groupId>
        <artifactId>Root</artifactId>
        <version>1.0</version>
        <relativePath>../Root</relativePath>
    </parent>
	
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
</project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1018481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt综述和报告

ChatGPT究竟强在哪&#xff1f;复旦大学邱锡鹏教授《大型语言模型的能力分析与应用》_哔哩哔哩_bilibili2022年底&#xff0c;美国OpenA1公司发布了ChatGPT&#xff0c;一个可以与人类对话交互的千亿规模参数的大型语言模型。它可以根据用户输入的指令完成各种语言相关的任务&a…

elasticsearch14-高亮

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

HTML 学习笔记(基础)

它是超文本标记语言&#xff0c;由一大堆约定俗成的标签组成&#xff0c;而其标签里一般又有一些属性值可以设置。 W3C标准&#xff1a;网页主要三大部分 结构&#xff1a;HTML表现&#xff1a;CSS行为&#xff1a;JavaScript <!DOCTYPE html> <html lang"zh-…

【Godot】解决游戏中的孤立/孤儿节点及分析器性能问题的分析处理

Godot 4.1 因为我在游戏中发现&#xff0c;越运行游戏变得越来越卡&#xff0c;当你使用 Node 节点中的 print_orphan_nodes() 方法打印信息的时候&#xff0c;会出现如下的孤儿节点信息 孤儿节点信息是以 节点实例ID - Stray Node: 节点名称(Type: 节点类型) 作为格式输出&a…

Linux管理多版本node.js

这里介绍的是Linux版本的nvm工具&#xff1a;一个nodejs版本管理工具&#xff01; 这里可以灵活切换node指定版本哟~ 下载地址&#xff1a;https://github.com/nvm-sh/nvm/releases/ 1.安装 需要先安装git、curl yum install -y git curl这里很慢&#xff0c;需要登录。 如果…

C语言指向二维数组的四种指针以及动态分配二维数组的五种方式

文章目录 应用场景可能指向二维数组的指针动态分配二维数组 应用场景 当二维数组作为结构成员或返回值时&#xff0c;通常需要根据用户传递的参数来决定二维数组的大小&#xff0c;此时就需要动态分配二维数组。 可能指向二维数组的指针 如果现在有一个二维数组a[3][2]&…

机械寿命预测(基于NASA C-MAPSS数据的剩余使用寿命RUL预测,Python代码,CNN_LSTM模型,有详细中文注释)

1.效果视频&#xff1a;机械寿命预测&#xff08;NASA涡轮风扇发动机剩余使用寿命RUL预测&#xff0c;Python代码&#xff0c;CNN_LSTM模型&#xff0c;有详细中文注释&#xff09;_哔哩哔哩_bilibili 环境库版本&#xff1a; 2.数据来源&#xff1a;https://www.nasa.gov/int…

指针和数组笔试题讲解(2)

&#x1f435;本篇文章将会对上篇一维数组笔试题的剩余部分和二维数组的笔试题进行讲解 一、一维数组 1>试题部分(一)✏️ char* p "abcdef";printf("%zd\n", sizeof(p)); printf("%zd\n", sizeof(p 1)); printf("%zd\n", sizeo…

Linux 创建目录

语法&#xff1a;mkdir xxx Linux路径 在当前目录下创建文件夹 在/目录下创建文件夹 如果想要一次性创建多个层级的目录&#xff0c;如下图 会报错&#xff0c;因为上级目录test并不存在&#xff0c;所以无法创建test目录 可以通过-p选项&#xff0c;将一整个链条都创建完成…

【OpenSSL】VC编译OpenSSL

VC编译OpenSSL 编译工具准备编译OpenSSL建立Hello World工程创建VS工程 编译工具准备 安装好Visual Studio。安装Perl, 主要是用来生成nmake的。准备好汇编语言编译工具nasm,并添加到path路径。下载好Open SSL源代码。 编译OpenSSL 安装Perl,并加入到path路径&#xff0c;检验…

【JAVA-Day18】用大白话讲解 Java 中的内存机制

标题 用大白话讲解 Java 中的内存机制摘要引言一、Java 内存机制1.1 栈内存1.2 堆内存 二、Java 如何管理内存三、合理管理内存的必要性与其他方式相比优势劣势建议四、总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《…

idea创建springboot项+集成阿里连接池druid

创建项目并集成流程 1&#xff1a;前提准备2&#xff1a;创建springboot项目流程3&#xff1a;集成阿里连接池步骤4&#xff1a;集成swagger方便测试5&#xff1a;书写增删改查进行测试6&#xff1a;项目gitee地址 1&#xff1a;前提准备 准备开发工具&#xff1a;idea java环…

UI自动化测试实践

一、设计背景 随着IT行业的发展&#xff0c;产品愈渐复杂&#xff0c;web端业务及流程更加繁琐&#xff0c;目前UI测试仅是针对单一页面&#xff0c;操作量大。为了满足多页面功能及流程的需求及节省工时&#xff0c;设计了这款UI 自动化测试程序。旨在提供接口&#xff0c;集…

Blazor前后端框架Known-V1.2.15

V1.2.15 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazo…

Linux下的系统编程——守护进程、线程(十二)

前言&#xff1a; 我们知道进程拥有一个PCB&#xff0c;在Linux中被称为task_struct,并且有一个进程地址空间&#xff0c;也有一个页表&#xff0c;通过页表指向物理内存&#xff0c;但是从今天开始&#xff0c;对进程的概念可能发生变化&#xff0c;这个我们后边来说&#xf…

【微信小程序】项目初始化

| var() CSS 函数可以插入一个自定义属性&#xff08;有时也被称为“CSS 变量”&#xff09;的值&#xff0c;用来代替非自定义 属性中值的任何部分。 1.初始化样式与颜色 view,text{box-sizing: border-box; } page{--themColor:#ad905c;--globalColor:#18191b;--focusColor…

通过Vcpkg直接安装Qt静态链接免编译的方式

Vcpkg支持自动编译Qt静态链接版&#xff0c;大约只需要30min左右&#xff0c;解决编译困扰和配置环境带来的各种影响。 一、查找Qt包 https://vcpkg.io/en/packages 输入qt5可找到qt5版本&#xff0c;如果需要安装最新的qt6&#xff0c;可直接输入qt&#xff0c;如下: 二、修…

操作系统存储器章节知识梳理

&#x1f525;&#x1f525;宏夏Coding网站&#xff0c;致力于为编程学习者、互联网求职者提供最需要的内容&#xff01;网站内容包括求职秘籍&#xff0c;葵花宝典&#xff08;学习笔记&#xff09;&#xff0c;资源推荐等内容。在线阅读&#xff1a;https://hongxiac.com&…

关于阻抗不连续的原因

1、连线中的分支结构 信号传输到分支结构处&#xff0c;表现出的是两条电路并联的效果&#xff0c;会导致阻抗的不连续问题。典型的就是菊花链结构。 2、参考平面的宽度 一般情况下参考平面都是很宽且连续的&#xff0c;但有的时候&#xff0c;参考平面会被反焊盘给掏空…

FPGA/数字IC(芯海科技2022)面试题 2(解析版)

以下仅为学习参考(非原创)&#xff0c;如有疑惑欢迎评论区指出&#xff01; 一、单选题&#xff08;共20题&#xff0c;每题3分&#xff0c;共60分&#xff09; 1. D触发器&#xff1a;Tsetup3ns&#xff0c;Thold1ns&#xff0c;Tck2q1ns&#xff0c; 该D触发器最大可运行时…