后端开发-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();
        }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 编译过程全解析:从源码到可执行文件的蜕变之旅

引言 C 作为一种广泛应用于系统开发、游戏编程、嵌入式系统等领域的高级编程语言&#xff0c;其代码需要经过编译才能转换为计算机可执行的机器语言。编译过程涵盖多个复杂阶段&#xff0c;每个阶段对最终生成的可执行文件的性能、稳定性及兼容性都有着深远影响。深入理解 C 编…

数据库的概念和操作

目录 1、数据库的概念和操作 1.1 物理数据库 1. SQL SERVER 2014的三种文件类型 2. 数据库文件组 1.2 逻辑数据库 2、数据库的操作 2.1 T-SQL的语法格式 2.2 创建数据库 2.3 修改数据库 2.4 删除数据库 3、数据库的附加和分离 1、数据库的概念和操作 1.1 物理数据库…

【CSS in Depth 2 精译_096】16.4:CSS 中的三维变换 + 16.5:本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…

期权懂|个股期权的流动性如何?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 个股期权的流动性如何&#xff1f; 个股期权作为场外交易工具&#xff0c;具有较高的灵活性。场外交易意味着交易双方可以直接协商交易条款&#xff0c;这有助于满足不同投资者的…

关于在M系列的Mac中使用SoftEtherClient软件

1. 前言 本文说明的是在M系列的苹果的MacBook中如何使用SoftetherClient这款软件&#xff0c;是直接在MacOS操作系统中安装连接使用&#xff0c;不是在PD环境或者非ARM架构的Mac中安装使用。 PS&#xff1a;别费劲百度了&#xff0c;很少有相关解决方案的&#xff0c;在国内会…

linux自动化批量分发SSH密钥同时批量测试SSH连接教程(包含自动化脚本代码)

1、检查端口 检查分发对象22端口是否打开 nmap -p22 ip地址如果要批量检查端口可以参考我写的这篇文章&#xff1a;linux自动化一键批量检查主机端口 2、命令行分发密钥原理 Linux分发密钥原理主要涉及SSH&#xff08;Secure Shell&#xff09;协议&#xff0c;该协议用于…

vue3学习笔记(9)-pinia、storeToRefs、getters

1.新的集中式状态&#xff08;数据&#xff09;管理库&#xff0c;redux vuex pinia 搭建 2.ref拆包 如果在reactive里面定义ref&#xff0c;则打印c时&#xff0c;无需.value 他自动拆包&#xff0c;如果直接在外面定义的ref则需要.value,他没有拆包 3.pinia存储读取数据 存…

Oracle 11G还有新BUG?ORACLE 表空间迷案!

前段时间遇到一个奇葩的问题&#xff0c;在开了SR和oracle support追踪两周以后才算是有了不算完美的结果&#xff0c;在这里整理出来给大家分享。 1.问题描述 12/13我司某基地MES全厂停线&#xff0c;系统卡死不可用&#xff0c;通知到我排查&#xff0c;查看alert log看到是…

深度学习:基于MindSpore NLP的数据并行训练

什么是数据并行&#xff1f; 数据并行&#xff08;Data Parallelism, DP&#xff09;的核心思想是将大规模的数据集分割成若干个较小的数据子集&#xff0c;并将这些子集分配到不同的 NPU 计算节点上&#xff0c;每个节点运行相同的模型副本&#xff0c;但处理不同的数据子集。…

机器学习-高斯混合模型

文章目录 高斯混合模型对无标签的数据集&#xff1a;使用高斯混合模型进行聚类对有标签的数据集&#xff1a;使用高斯混合模型进行分类总结实战 高斯混合模型 对无标签的数据集&#xff1a;使用高斯混合模型进行聚类 对有标签的数据集&#xff1a;使用高斯混合模型进行分类 总结…

android studio android sdk下载地址

android studio安装后&#xff0c;因为公司网络原因&#xff0c;一直无法安装android sdk 后经过手机网络&#xff0c;安装android sdk成功如下&#xff0c;也可以手动下载后指定android sdk本地目录 https://dl.google.com/android/repository/source-35_r01.zip https://dl…

【RK3588 Linux 5.x 内核编程】-内核I2C子系统介绍

内核I2C子系统介绍 文章目录 内核I2C子系统介绍1、内核中的I2C子系统2、内核中的I2C驱动2.1 获取I2C适合器2.2 创建i2c_board_info与设备2.3 创建设备ID和I2C驱动2.4 数据传输2.4.1 发送数据2.4.2 读取数据3、I2C总线如何工作I2C 是一种用于双线接口的串行协议,用于连接低速设…

更新本地项目到最新git版本脚本

由于平时工作中项目较多&#xff0c;每天刚上班都需要更新一下项目代码&#xff0c;一个一个更新感觉稍微麻烦了一些&#xff0c;所以写了一个简单的shell脚本&#xff0c;每天到公司先执行一遍即可。 #!/bin/bash# 进入指定的目录 target_dir"$1"; cd "$targe…

向量检索+大语言模型,免费搭建基于专属知识库的 RAG 智能助手

随着生成式人工智能技术的飞速发展&#xff0c;越来越多的人和企业开始应用AI到日常的工作和生活中。但公域的AI助手其数据来自互联网上的大量公开文本&#xff0c;虽然具有广泛的知识&#xff0c;但在面对一些特定领域的专业问题时&#xff0c;可能会出现回答不够准确或深入的…

python读写文件的三种做法

对于文件操作&#xff0c;python提供了3种做法&#xff1a;open(), os.open() 和with open()语句。 1. open()函数&#xff1a;一般用于更高级的文件读写操作&#xff0c;即人能读懂的用法&#xff0c;如果是写入数据&#xff0c;可用传入字符串。 用法&#xff1a;open(path…

RCE-PLUS (学习记录)

源码 <?php error_reporting(0); highlight_file(__FILE__); function strCheck($cmd) {if(!preg_match("/\;|\&|\\$|\x09|\x26|more|less|head|sort|tail|sed|cut|awk|strings|od|php|ping|flag/i", $cmd)){return($cmd);}else{die("i hate this"…

【分布式文件存储系统Minio】2024.12保姆级教程

文章目录 1.介绍1.分布式文件系统2.基本概念 2.环境搭建1.访问网址2.账号密码都是minioadmin3.创建一个桶4.**Docker安装miniomc突破7天限制**1.拉取镜像2.运行容器3.进行配置1.格式2.具体配置 4.查看桶5.给桶开放权限 3.搭建minio模块1.创建一个oss模块1.在sun-common下创建2.…

目标检测入门指南:从原理到实践

目录 1. 数据准备与预处理 2. 模型架构设计 2.1 特征提取网络原理 2.2 区域提议网络(RPN)原理 2.3 特征金字塔网络(FPN)原理 2.4 边界框回归原理 2.5 非极大值抑制(NMS)原理 2.6 多尺度训练与测试原理 2.7 损失函数设计原理 3. 损失函数设计 4. 训练策略优化 5. 后…

react中实现拖拽排序

效果图&#xff1a;如下 效果说明&#xff1a; 1. 点击“选择”按钮&#xff0c;打开弹窗 2. 左侧数据是调接口回显来的 3. 点击左侧某条数据&#xff0c;这条被点击的数据就会被添加到右侧 4. 右侧的数据可以上下拖动换位置 5. 右侧有数据时&#xff0c;点击"确定"…

亚马逊国际站商品爬虫:Python实战指南

在数字化时代&#xff0c;数据的价值不言而喻。对于电商领域而言&#xff0c;获取竞争对手的商品信息、价格、评价等数据&#xff0c;对于市场分析和策略制定至关重要。本文将带你了解如何使用Python编写爬虫&#xff0c;以亚马逊国际站为例&#xff0c;按照关键字搜索并获取商…