当前位置: 首页 > news >正文

后端开发-Maven

环境说明:

windows系统:11版本

idea版本:2023.3.2

Maven

介绍

Apache Maven 是一个 Java 项目的构建管理和理解工具。Maven 使用一个项目对象模型(POM),通过一组构建规则和约定来管理项目的构建,报告和文档。Maven 可以处理 Java 项目从构建、文档化到部署的整个生命周期。

特点

  1. 依赖管理:Maven 能够自动下载项目所需的库,并且处理这些库之间的依赖关系。它还能够解析版本冲突并选择合适的版本。

  2. 项目构建:自动画项目构建方式

  3. 统一的项目结构:提供标准统一的项目结构

Jar包

介绍 

JAR(Java ARchive)是一种压缩文件格式,主要用于打包 Java 类和相关的元数据和资源(如图像、属性文件等)。JAR 文件格式本质上类似于 ZIP 格式,但它提供了额外的功能,比如对类路径的支持和数字签名能力。

用途

打包类和资源:
        JAR 文件可以包含多个 .class 文件(编译后的 Java 字节码),以及相关的资源文件。这样可以将一个或多个相关的类文件打包成单个文件,便于管理和分发。
类路径管理:
        JAR 文件可以被添加到 Java 应用程序的类路径中。这意味着当应用程序运行时,Java 虚拟机(JVM)会搜索类路径中的 JAR 文件来查找需要加载的类。
自包含应用程序:
        通过使用 jar 工具的 mf 参数指定清单文件(Manifest file),可以在 JAR 文件中包含必要的元数据,使 JAR 文件成为自包含的应用程序。清单文件可以指定主类(Main-Class),这是应用程序的入口点。
签名:
        JAR 文件可以被数字签名,这允许用户验证 JAR 文件的来源和完整性,确保没有被篡改过。 

创建jar文件

  • 编译 Java 源代码生成 .class 文件。
  • 使用 jar 工具或者 IDE 中的功能来创建 JAR 文件。
  • 如果需要的话,可以使用 jar 工具的 -C 参数来指定目录,将目录下的所有文件打包进 JAR 文件。
  • 添加清单文件以指定主类或者其他元数据。
  • 对于需要签名的 JAR 文件,还需要使用 Java 的 jarsigner 工具来进行签名。 

仓库:

用于存储资源,管理各种jar包。

  • 本地仓库:自己计算机上的一个目录
  • 中央仓库:由Maven团队维护的全球唯一的

                      (仓库地址:Central Repository:)

  • 远程仓库(私服):一般由公司团队搭建的私有仓库 

安装Maven

 (IDEA集成了Maven,如果使用IDEA作为开发工具,这一步可以省略)

1.官网下载安装包: 

Maven – Welcome to Apache Mavenicon-default.png?t=O83Ahttps://maven.apache.org/

2. 配置本地仓库:

找到conf文件夹下的settings.xml中的<localRepository>标签,修改本地仓库路径

 

<localRepository>
D:\Users\maven\apache-maven-3.6.1-bin\apache-maven-3.6.1\maven_repository
</localRepository>

3.配置阿里云私服:

修改conf文件夹下的settings.xml中的<mirrors>标签,为其添加如下子标签
仓库服务icon-default.png?t=O83Ahttps://developer.aliyun.com/mvn/guide

<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>

Maven环境配置 

1.MAVEN_HOME变量

在设置中打开编辑系统环境变量

打开环境变量

在系统变量下,新建一个变量,变量名位MAVEN_HOME,变量值为maven的解压目录

 2.加入path

在用户变量下新建%MAVEN_HOME%\bin

 3.检查环境

查看maven环境是否配置成功

输入: 

mvn -v

 

若能输出版本号,则说明配置成功 

IDEA

创建maven项目

Maven坐标

介绍

在 Maven 中,"坐标"(Coordinates)是指定一个项目的唯一标识符集合。Maven 使用这些坐标来唯一确定一个库或项目的位置,这对于依赖管理和构建过程非常重要。

组成

组成说明
groupId表示项目的组织名或公司名。通常使用反向域名的形式来避免命名冲突,例如 com.example。
artifactId表示项目中的具体模块或者组件的名字。例如,在一个名为 myproject 的 groupId 下,可能有 core, ui, service 等不同的 artifactId。
version表示项目的版本号。版本号遵循一定的规则,如 1.0.0 或者 2.3.1-SNAPSHOTSNAPSHOT 版本是指尚未发布的版本,常用于开发中的版本
packaging表示项目的主要打包类型,默认是 jar。其他常见的打包类型包括 war(Web 应用程序)、ear(企业应用程序)、pom(项目描述符文件)等。
classifier这是一个可选的部分,用于区分具有相同 groupId、artifactId 和 version 的不同打包类型。例如,如果你有两个 JAR 文件,一个是普通的 JAR 文件,另一个是包含源代码的 JAR 文件,你可以分别为它们指定 null 和 sources 作为 classifier。

eg:

<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<classifier>sources</classifier>

 使用坐标

当你在 pom.xml 文件中声明依赖时,你需要提供完整的坐标来指定你要使用的库

<dependencies><dependency><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0.0</version></dependency>
</dependencies>

依赖配置

介绍

指当前项目运行所需要的jar包,一个项目可以引入多个依赖

pom.xml中依赖配置查询网址:

https://mvnrepository.com/

配置

1. 在pom.xml中编写<dependencies>标签

2.在<dependencies>标签中使用<dependency>引入坐标

3.定义坐标的groupId,artifactId,version

<!-- 导入当前项目所需的所有依赖资源  --><dependencies><dependency><!-- 组织名 --><groupId>ch.qos.logback</groupId><!-- 模块名 --><artifactId>logback-classic</artifactId><!-- 版本号 --><version>1.2.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version><scope>test</scope></dependency></dependencies>

依赖特点 

依赖传递

1.依赖具有传递性:

        直接依赖:在当前项目中通过依赖配置建立的依赖关系

        间接依赖:被依赖的资源如果依赖其它资源,当前项目也和其它资源具有依赖关系

2.排除传递

        排除依赖指主动断开依赖资源,被排除的资源无需指定版本

 依赖范围

在Maven中,依赖范围是在pom.xml文件中通过<scope>元素定义的

1.Compile(编译)
这些依赖项是项目编译期间必需的,也是最常见的依赖范围。它们会被包含在编译类路径中,因此在编译源代码时会被使用到。
2.Provided(已提供)
类似于编译范围,但在运行时假设该依赖项会被容器或框架提供,因此不会打包到最终的应用程序中。例如,在Java Web应用中,Servlet API通常会被Web容器提供。
3.Runtime(运行时)
这些依赖项在编译期间不需要,但在运行应用程序时是必要的。例如,JDBC驱动通常只在运行时需要。
4.Test(测试)

测试范围的依赖项仅用于构建和运行测试代码,不会被包含在生产环境中。JUnit或Mockito这样的测试框架就属于此类。 

生命周期

1. Clean 生命周期

Clean 生命周期主要用于清理项目,删除之前构建时生成的所有文件。这对于重新开始构建非常有用,以确保没有旧的输出影响新的构建。它包括以下几个阶段:

  • pre-clean: 执行任何必要的特殊清理前任务。
  • clean: 清除先前构建的所有输出。
  • post-clean: 清理之后的任务。

2. Default 生命周期

这是最常用的生命周期,涵盖了项目的构建过程,从源码编译到最后的部署。Default 生命周期包括但不限于:

  • validate: 验证项目是否正确,所有需要的资源都存在,并且系统处于稳定状态。
  • compile: 编译源代码。
  • test: 使用适当的单元测试/集成测试框架来测试编译后的代码。这些测试不允许失败。
  • package: 将编译好的代码打包成可分发的形式,如 JAR、WAR、EAR 文件等。
  • integration-test: 处理集成测试(如果必要的话)。
  • verify: 运行任何检查以验证包是否有效且符合质量要求。
  • install: 将包安装到本地存储库,以供其他项目作为依赖来使用。
  • deploy: 将最终的包复制到远程存储库,以与其他团队成员共享此包。

3. Site 生命周期

Site 生命周期用于生成项目文档,这些文档通常被称为站点。站点提供了关于项目的重要信息,比如报告和其他文档。

  • pre-site: 在生成站点之前做准备工作。
  • site: 生成项目站点文档。
  • post-site: 在站点生成之后的操作。
  • site-deploy: 将生成的站点文档部署到服务器上。

SpringBoot

创建项目:

1.在idea中用spring initializer的方式创建一个项目

2.会自动生成启动类Application

Http协议:

定义:

超文本传输协议,规定了浏览器和服务器之间数据传输的规则

Request Headers : 请求的数据

Response Headers: 响应的数据

请求行:

GET: 请求方式

/hello: 请求资源路径

HTTP/1.1: 请求协议/版本

请求数据方式:

响应数据方式:

 
 // 请求读取HTTP请求boolean requestOk = false;String first = reader.readLine(); // 读取请求行if (first.startsWith("GET / HTTP/1.")){requestOk = true; // 请求成功}// 从第二行开始读取请求头的信息for (;;) {String header = reader.readLine();if (header.isEmpty()) { // 空行,请求结束break;}System.out.println(header);}
​// 响应数据if (requestOk) {// 读取html文件,转换为字符串/*Server.class:这是指向Server类的Class对象的引用。getClassLoader():这个方法返回加载Server类的类加载器。类加载器负责加载类,并且也可以用来加载其他资源。getResourceAsStream(String path):这个方法根据给定的路径获取一个输入流。路径是相对于classpath的根目录。*/InputStream is = Server.class.getClassLoader().getResourceAsStream("static/01.GET-POST.html");BufferedReader br = new BufferedReader(new InputStreamReader(is));StringBuilder data = new StringBuilder();
​String line = null;while ((line = br.readLine()) != null) {data.append(line);}br.close();
​int len = data.toString().getBytes(StandardCharsets.UTF_8).length;// 响应数据writer.write("HTTP/1.1 200 OK\r\n");writer.write("Connection: keep-alive\r\n");writer.write("Content-Type: text/html\r\n");writer.write("Content-Length: " + len + "\r\n");writer.write("\r\n");writer.write(data.toString());writer.flush();} else {writer.write("HTTP/1.0 404 Not Found\r\n");writer.write("Content-Length: 0\r\n");writer.write("\r\n");writer.flush();}


http://www.mrgr.cn/news/82031.html

相关文章:

  • 2501d,jingo优化
  • module java.base does not “opens java.io“ to unnamed module
  • 【Rust自学】8.2. Vector + Enum的应用
  • HTML——57. type和name属性
  • NLP模型工程化部署
  • 金融租赁系统的创新与发展推动行业效率提升
  • 细说STM32F407单片机CAN基础知识及其HAL驱动程序
  • FPGA多路红外相机视频拼接输出,提供2套工程源码和技术支持
  • 数据结构与算法之动态规划: LeetCode 674. 最长连续递增序列 (Ts版)
  • 配置中心 之 apollo
  • Postman[8] 断言
  • python文件操作相关(excel)
  • SpringJPA使用崩溃了
  • Web安全 - “Referrer Policy“ Security 头值不安全
  • RK3568 bsp 9 - USB调试记录
  • 深度学习blog- 数学基础(全是数学)
  • C++类与对象(三)-- 再谈构造函数(细嗦初始化列表)、static成员
  • 《机器学习》从入门到实战——逻辑回归
  • 机器学习之逻辑回归算法、数据标准化处理及数据预测和数据的分类结果报告
  • JDK 21 的重要特性
  • Java方法使用详解:从基本概念到进阶技巧
  • 一个响应式的系统 具有黑白俩个主题
  • 学习vue3的笔记
  • Vue 中el-table-column 进行循环,页面没渲染成功
  • 基本算法——聚类
  • Android原生Widget使用步骤