框架学习Maven

news2024/12/28 18:16:46

声明:本文来源于黑马程序员PDF讲义

做为一名Java开发工程师,后端 Web开发技术是我们学习的重点,后端Web开发技术的学习,我们会先学习Java项目的构建工具:Maven

初识Maven

Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。

使用Maven能够做什么呢?

1. 依赖管理 2. 统一项目结构 3. 项目构建

        当使用maven进行项目依赖(jar包)管理,则很方便的可以解决这个问题。 我们只需要在maven项目 的pom.xml文件中,添加一段如下图所示的配置即可实现。

<!-- 依赖声明 -->
    <dependencyManagement>
        <dependencies>

            <!-- SpringBoot的依赖配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.5.15</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- 阿里数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!-- 解析客户端操作系统、浏览器等 -->
            <dependency>
                <groupId>eu.bitwalker</groupId>
                <artifactId>UserAgentUtils</artifactId>
                <version>${bitwalker.version}</version>
            </dependency>

            <!-- pagehelper 分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>${pagehelper.boot.version}</version>
            </dependency>

            <!-- 获取系统信息 -->
            <dependency>
                <groupId>com.github.oshi</groupId>
                <artifactId>oshi-core</artifactId>
                <version>${oshi.version}</version>
            </dependency>

            <!-- Swagger3依赖 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-boot-starter</artifactId>
                <version>${swagger.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>io.swagger</groupId>
                        <artifactId>swagger-models</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- io常用工具类 -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons.io.version}</version>
            </dependency>

            <!-- excel工具 -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>${poi.version}</version>
            </dependency>

            <!-- velocity代码生成使用模板 -->
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>${velocity.version}</version>
            </dependency>

            <!-- collections工具类 -->
            <dependency>
                <groupId>commons-collections</groupId>
                <artifactId>commons-collections</artifactId>
                <version>${commons.collections.version}</version>
            </dependency>

            <!-- 阿里JSON解析器 -->
            <dependency>
                <groupId>com.alibaba.fastjson2</groupId>
                <artifactId>fastjson2</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

            <!-- Token生成与解析-->
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt</artifactId>
                <version>${jwt.version}</version>
            </dependency>

            <!-- 验证码 -->
            <dependency>
                <groupId>pro.fessional</groupId>
                <artifactId>kaptcha</artifactId>
                <version>${kaptcha.version}</version>
            </dependency>

            <!-- 定时任务-->
            <dependency>
                <groupId>com.xxxx</groupId>
                <artifactId>xxxx-quartz</artifactId>
                <version>${xxxx.version}</version>
            </dependency>

            <!-- 代码生成-->
            <dependency>
                <groupId>com.xxxx</groupId>
                <artifactId>xxxx-generator</artifactId>
                <version>${xxxx.version}</version>
            </dependency>

            <!-- 核心模块-->
            <dependency>
                <groupId>com.xxxx</groupId>
                <artifactId>xxxx-framework</artifactId>
                <version>${xxxx.version}</version>
            </dependency>

            <!-- 系统模块-->
            <dependency>
                <groupId>com.xxxx</groupId>
                <artifactId>xxxx-system</artifactId>
                <version>${xxxx.version}</version>
            </dependency>

            <!-- 通用工具-->
            <dependency>
                <groupId>com.xxxx</groupId>
                <artifactId>xxxx-common</artifactId>
                <version>${xxxx.version}</version>
            </dependency>

            <!-- xxxxM模块-->
            <dependency>
                <groupId>com.xxxx</groupId>
                <artifactId>xxxx-main</artifactId>
                <version>${jcdm.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
                <version>2.12.0</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

Maven模型

  • 项目对象模型 (Project Object Model)
  • 依赖管理模型(Dependency)
  • 构建生命周期/阶段(Build lifecycle & phases)

1). 构建生命周期/阶段(Build lifecycle & phases)

        以上图中紫色框起来的部分,就是用来完成标准化构建流程 。当我们需要编译,Maven提供了一个编译插件供我们使用;当我们需要打包,Maven就提供了一个打包插件供我们使用等。

2). 项目对象模型 (Project Object Model)

        以上图中紫色框起来的部分属于项目对象模型,就是将我们自己的项目抽象成一个对象模型,有自己专属的坐标,如下图所示是一个Maven项目:

坐标,就是资源(jar包)的唯一标识,通过坐标可以定位到所需资源(jar包)位置

3). 依赖管理模型(Dependency)

以上图中紫色框起来的部分属于依赖管理模型,是使用坐标来描述当前项目依赖哪些第三方jar包

        之前我们项目中需要jar包时,直接就把jar包复制到项目下的lib目录,而现在书写在pom.xml文件中的坐标又是怎么能找到所要的jar包文件的呢?

答案:Maven仓库

仓库:用于存储资源,管理各种jar包

仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(就是jar包)和插件

Maven仓库分为:

  • 本地仓库:自己计算机上的一个目录(用来存储jar包)
  • 中央仓库:由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven 2/
  • 远程仓库(私服):一般由公司团队搭建的私有仓库

当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包

  • 如果有,则在项目直接引用
  • 如果没有,则去中央仓库中下载对应的jar包到本地仓库

如果还可以搭建远程仓库(私服),将来jar包的查找顺序则变为:本地仓库 --> 远程仓库--> 中央仓库

Maven安装配置步骤:

1. 解压安装 2. 配置仓库 3. 配置Maven环境变量

IDEA集成Maven

POM配置详解

POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。

使用pom.xml文件来实现 pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- POM模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 当前项目坐标 -->
<groupId>com.itheima</groupId>
<artifactId>maven_project1</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式 -->
<packaging>jar</packaging>
</project>

1、pom:用在父级工程或聚合工程中,用来做jar包的版本控制,必须指明这个聚合工程的打包方式为pom

2、jar:工程的默认打包方式,打包成jar用作jar包使用。存放一些其他工程都会使用的类,工具类。我们可以在其他工程的pom文件中去引用它

3、 war:将会打包成war,发布在服务器上,如网站或服务。用户可以通过浏览器直接访问,或者是通过发布服务被别的工程调用

Maven坐标详解

什么是坐标?

  • Maven中的坐标是 资源的唯一标识 , 通过该坐标可以唯一定位资源位置
  • 使用坐标来定义项目或引入项目中需要的依赖

Maven坐标主要组成

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
  • artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goodsservice) version:定义当前项目版本号

如下图就是使用坐标表示一个项目:

依赖配置

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

例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件 中,引入logback的依赖。具体步骤如下:

  1. 在pom.xml中编写标签
  2.  在标签中使用引入坐标
  3. 定义坐标的 groupId、artifactId、version

注意事项:

1. 如果引入的依赖,在本地仓库中不存在,将会连接远程仓库 / 中央仓库,然后下载依赖 (这个过程会比较耗时,耐心等待)

2. 如果不知道依赖的坐标信息,可以到mvn的中央仓库 (https://mvnrepository.com/)中搜索

排除依赖

问题:之前我们讲了依赖具有传递性。那么A依赖B,B依赖C,如果A不想将C依赖进来,是否可以做到?

答案:在maven项目中,我们可以通过排除依赖来实现

什么是排除依赖?

排除依赖:指主动断开依赖的资源。(被排除的资源无需指定版本)

<dependency>
    <groupId>com.itheima</groupId>
    <artifactId>maven-projectB</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--排除依赖, 主动断开依赖的资源-->
    <exclusions>
         <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
         </exclusion>
    </exclusions>
</dependency>

依赖范围

在项目中导入依赖的jar包后,默认情况下,可以在任何地方使用。

如果希望限制依赖的使用范围,可以通过标签设置其作用范围

作用范围:

  • 主程序范围有效(main文件夹范围内)
  • 测试程序范围有效(test文件夹范围内)
  • 是否参与打包运行(package指令范围内)

如上图所示,给junit依赖通过scope标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环 境,其他环境下不能使用。

生命周期

Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作。在Maven的设计中,实际任务 (如源代码编译)都交由插件来完成。

compile:

test:

package:

install:

clean:

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

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

相关文章

rust学习基于tokio_actor聊天服务器实战(一 )

前言 tokio是Rust中使用最广泛的异步Runtime&#xff0c;它性能高、功能丰富、便于使用&#xff0c;是使用Rust实现高并发不可不学的一个框架 Actor 背后的基本思想是产生一个独立的任务&#xff0c;该任务独立于程序的其他部分执行某些工作。 通常&#xff0c;这些参与者通过使…

【PyQt】02-基本UI

文章目录 前言一、首先了解什么是GUI&#xff1f;二、初学程序1.界面展示代码运行结果 2.控件2.1按钮展示代码运行结果 2.2 纯文本和输入框代码运行结果 3、重新设置大小 -resize4、移动窗口-move()5、设置界面在电脑中央5.1 代码运行结果 6、设置窗口图标代码运行结果 7、布局…

深度学习(10)-Keras项目详解(递归神经网络)

一.递归神经网络基础概念 递归神经网络(Recursive Neural Network, RNN)可以解决有时间序列的问题&#xff0c;处理诸如树、图这样的递归结构。 CNN主要应用在计算机视觉CV中&#xff0c;RNN主要应用在自然语言处理NLP中。 1.h0&#xff0c;h1.....ht对应的是不同输入得到的中…

判断当前设备是不是安卓或者IOS?

代码(重要点): 当前文件要是 xxx.js文件,就需要写好代码后调用才会执行: // 判断是不是安卓 const isAndroid () > {return /android/.test(navigator.userAgent.toLowerCase()); }// 判断是不是ios const isIOS () > {return /iphone|ipad|ipod/.test(navigator.use…

跟着cherno手搓游戏引擎【16】Camera和Uniform变量的封装

相机封装&#xff1a; OrthographicCamera.h: #pragma once #include <glm/glm.hpp> namespace YOTO {class OrthographicCamera{public:OrthographicCamera(float left,float right , float bottom,float top);const glm::vec3& GetPosition()const { return m_Pos…

Android开发--ProgressBar应用显示测点数量

1.自定义ProgressBarView public class ProgressBarView extends View {private Paint mPaintBack;private Paint mPaint;private Paint mPaintText;private float process;int strokeWidth 3;//圈宽度int textSize 17;//字大小private long duration 1000;private float st…

力扣 274.H指数

弄清楚H指数的含义就行 代码&#xff1a; class Solution { public:int hIndex(vector<int>& citations) {sort(citations.rbegin(),citations.rend());//先逆序排序for(int i0;i<citations.size();i){if(citations[i]<i1) return i;}return citations.size(…

【机器学习】监督学习算法之:决策树

决策树 1、引言2、决策树2.1 定义2.2 原理2.3 实现方式2.4 算法公式2.4.1 信息增益公式2.4.2 信息增益率公式 2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;我被你骗了。 小鱼&#xff1a;… 别闹&#xff0c;我怎么可能骗你呢。 小屌丝&#xff1a;你上次…

【GPU驱动开发】-LLVM和Clang环境部署

前言 不必害怕未知&#xff0c;无需恐惧犯错&#xff0c;做一个Creator&#xff01; 一、下载LLVM源码 官网下载源码 https://github.com/llvm/llvm-project/releases/ 包含所有llvm版本的下载内容 win源码传到ubuntu 首先将虚拟机关机&#xff0c;在虚拟机设置中&#xff…

机器学习:梯度下降法(Python)

LinearRegression_GD.py import numpy as np import matplotlib.pyplot as pltclass LinearRegression_GradDesc:"""线性回归&#xff0c;梯度下降法求解模型系数1、数据的预处理&#xff1a;是否训练偏置项fit_intercept&#xff08;默认True&#xff09;&…

【Tomcat与网络8】从源码看Tomcat的层次结构

在前面我们介绍了如何通过源码来启动Tomcat&#xff0c;本文我们就来看一下Tomcat是如何一步步启动的&#xff0c;以及在启动过程中&#xff0c;不同的组件是如何加载的。 一般&#xff0c;我们可以通过 Tomcat 的 /bin 目录下的脚本 startup.sh 来启动 Tomcat&#xff0c;如果…

node.js(nest.js控制器)学习笔记

nest.js控制器&#xff1a; 控制器负责处理传入请求并向客户端返回响应。 为了创建基本控制器&#xff0c;我们使用类和装饰器。装饰器将类与所需的元数据相关联&#xff0c;并使 Nest 能够创建路由映射&#xff08;将请求绑定到相应的控制器&#xff09;。 1.获取get请求传参…

使用 Enigma Protector 无需管理员权限即可注册 ActiveX/COM 组件

我们的客户对如何保护 .NET 应用程序免遭破解和转储提出了许多问题。在本文中&#xff0c;我们将尝试描述保护此类特定文件的所有薄弱环节和细节。 The Enigma Protector 是一款专门设计用来为应用程序添加高强度保护的强大工具。它旨在防止非法复制、反编译和修改代码等操作&…

数据结构与算法面试系列-03

1. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 程序代码 package com.jingxuan.system;public class Sphere {public static void main(String[] args) {double s = 0;double t = 100;for (int i…

搜维尔科技:第九届元宇宙数字人大赛,参赛小组报名确认公告!

各位参赛选手大家好&#xff0c;近期已收到新增报名信息如下表&#xff0c;请各位参赛选手确认&#xff0c;如果信息有误或信息不完整请电话联系赛务组工作人员进行更正 随着元宇宙时代的来临&#xff0c;数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划…

多线程代码案例之线程池

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构&#xff0c;javaee等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 创建线程池 public class Poo…

Java面试题宝典(万字长文)

Java 基础 1. JDK 和 JRE 有什么区别&#xff1f; JRE是Java运行环境&#xff0c;即&#xff08;Java Runtime Environment&#xff09;&#xff0c;也就是Java平台。所有的Java程序都要在JRE下才能运行。 JDK是开发工具包&#xff0c;即&#xff08;Java Development Kit&am…

经典mysql实操和行专列操作

1.删除除了学号字段以外&#xff0c;其它字段都相同的冗余记录&#xff0c;只保留一条&#xff01;&#xff08;也就是要删除王五和赵六中一条重复数据只留一条&#xff09; 要求的预期效果: 原始数据创建表结构&#xff1a; CREATE TABLE tb_student (id int(16) NOT NULL,na…

科技云报道:云原生PaaS,如何让金融业数字化开出“繁花”?

科技云报道原创。 在中国金融业数字化转型的历史长卷中&#xff0c;过去十年无疑是一部磅礴的史诗。 2017年&#xff0c;南京银行第一次将传统线下金融业务搬到了线上。那一年&#xff0c;它的互联网金融信贷业务实现了过去10年的业务总额。 2021年&#xff0c;富滇银行通过…

【大数据安全】数据管理安全安全分析隐私保护

目录 一、数据管理安全 &#xff08;一&#xff09;数据溯源 &#xff08;二&#xff09;数字水印 &#xff08;三&#xff09;策略管理 &#xff08;四&#xff09;完整性保护 &#xff08;五&#xff09;数据脱敏 二、安全分析 &#xff08;一&#xff09;大数据安全…