6 maven工具的使用、maven项目中使用日志
文章目录
- 前言
 - 一、maven:一款管理和构建java项目的工具
 - 1 基本概念
 - 2 maven的安装与配置
 - (1)maven的安装
 - (2)IDEA集成Maven配置
 - 当前项目工程设置 maven
 - 全局设置
 
- (3)创建一个maven项目
 
- 3 pom.xml文件
 - 4 导入maven项目
 - 5 依赖管理
 - (1)依赖配置
 - (2)依赖传递
 - 特性1:坐标引入一个jar包会将其需要的依赖jar包一起引入进来
 - 特性2:坐标引入项目中其他模块(在本项目一个模块中将另一个项目当依赖引进来)
 
- (3)排除指定依赖
 - (4)依赖范围
 - (5)生命周期(编译、打包)
 
- 二、maven中使用日志
 - 三、maven进阶:高级使用
 
前言
一、maven:一款管理和构建java项目的工具
1 基本概念
参考视频
-  
什么是maven?
Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。
POM: project object model -  
官网:http://maven.apache.org/
 -  
Maven的作用?
-  
依赖管理
方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题。 -  
统一项目结构
提供标准、统一的项目结构

 -  
项目构建
标准跨平台(Linux、Windows、MacOS)的自动化项目构建方式
maven提供了指令可以快速的将项目进行 编译、打包这些工作 
 -  
 -  
工作原理:
参考视频

- 仓库: 用于存储资源,管理各种jar包。 
- 本地仓库: 自己计算机上的一个目录。
 - 中央仓库: 由Maven团队维护的全球唯一的。仓库地址: https://repo1.maven.org/maven2/
 - 远程仓库(私服): 一般由公司团队搭建的私有仓库。
 
 
 - 仓库: 用于存储资源,管理各种jar包。 
 
2 maven的安装与配置
(1)maven的安装
参考视频:安装很简单,直接跟着视频来做就可以了
- 安装步骤:
最好去官网下载最新版本装,不然有可能有插件要求的maven版本太低,我使用是装的3.9.9版本的- 解压 apache-maven-3.6.1-bin.zip
下载地址:https://maven.apache.org/download.cgi - 配置本地仓库: 修改 conf/settings.xml中的<localRepository>为一个指定目录

 - 配置阿里云私服:修改 conf/settings.xml中的<mirrors>标签,为其添加如下子标签:
这个阿里云已经失效,我们改为华为云 - 配置环境变量: MAVEN HOME为maven的解压目录,并将其bin目录加入PATH环境变量
 
 - 解压 apache-maven-3.6.1-bin.zip
 
	<!-- 配置华为的Maven镜像 --><mirror><id>huaweicloud</id><mirrorOf>*</mirrorOf><url>https://mirrors.huaweicloud.com/repository/maven/</url></mirror><!-- 配置官方的Maven镜像 --><mirror><id>central</id><name>Maven Central</name><url>https://repo1.maven.org/maven2/</url><mirrorOf>central</mirrorOf></mirror>
 
(2)IDEA集成Maven配置
当前项目工程设置 maven
1、创建一个空的项目
 
 
 
 2、选择 IDEA中 File => Settings => Build,Execution,Deployment => Build Tools => Maven

3、设置IDEA使用本地安装的Maven,并修改配置文件及本地仓库路径

Maven home path :指定当前Maven的安装目录
User settings file :指定当前Maven的settings.xml配置文件的存放路径
Local repository :指定Maven的本地仓库的路径 (如果指定了settings.xml, 这个目录会自动读取出来, 可以不用手动指定)
4、配置工程的编译版本为17
- Maven默认使用的编译版本为5(版本过低)
 

 
上述配置的maven环境,只是针对于当前工程的,如果我们再创建一个project,又恢复成默认的配置了。 要解决这个问题, 我们就需要配置全局的maven环境。
全局设置
1、进入到IDEA欢迎页面
 
2、打开 All settings , 选择 Build,Execution,Deployment => Build Tools => Maven

3、配置工程的编译版本为17

 
这里所设置的maven的环境信息,并未指定任何一个project,此时设置的信息就属于全局配置信息。 以后,我们再创建project,默认就是使用我们全局配置的信息。
(3)创建一个maven项目
1、创建一个空的项目
 
2、创建模块,选择Maven,点击Next
 
 创建出来的目录如下:
 
3、手动创建main和test目录下的:resources文件夹
 
 这样就创建了一个完整的maven项目目录
 
3 pom.xml文件
创建了一个maven项目或者模块就会生成一个pom.xml文件,这个文件就可以看做这个项目的一个配置文件
这个配置文件就可以指定maven的坐标和jar包的依赖管理
<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"><modelVersion>4.0.0</modelVersion><groupId>cn.hjblogs</groupId>                  <!--包名,也可以理解为组织名--><artifactId>test_model</artifactId>            <!--项目名或者模块名--><version>1.0-SNAPSHOT</version>                <!--版本号--><packaging>jar</packaging>                    <name>test_model</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>
</project>
 
-  
什么是坐标?
Maven 中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置
使用坐标来定义项目或引入项目中需要的依赖。 -  
Maven 坐标主要组成
groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
artifactld:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
version:定义当前项目版本号

 
4 导入maven项目
参考视频
5 依赖管理
(1)依赖配置
参考视频
- 依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖
 - 配置: 
- 在 pom.xml中编写<dependencies>标签
 - 在<dependencies>标签中 使用<dependency>引入坐标
 - 定义坐标的 groupld,artifactld,version
 - 点击刷新按钮,引入最新加入的坐标

 
 - 注意 
-  
如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖。(这个过程会比较耗时,耐心等待)
 -  
下面这个网址可以找到各种jar包依赖的maven坐标,我们直接去找即可
https://mvnrepository.com/artifact/ch.qos.logback/logback-classic/1.2.3 -  
<scope>test</scope>:这个处理junit这些只有测试会用到的依赖,不要加;
如果不知道应不应该加,一句话不加一定不会有问题,加了可能会有问题
如果某个依赖仅用于编写和运行测试代码,比如测试框架(JUnit、Mockito 等),那么可以将其作用范围设置为 test,这样可以减小最终构建产物的大小,避免不必要的依赖被打包进去。如果某个依赖是项目正常运行所必需的,那么应该使用默认的 compile 范围。 
 -  
 

 如果右上角小按钮没有:可以下面
 
刷新等待下载完成,红色报错信息消失就是配置好了,我们可以尝试一下。
 
(2)依赖传递
参考视频
- 依赖具有传递性 
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
 - 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

 
 
特性1:坐标引入一个jar包会将其需要的依赖jar包一起引入进来

 可以看到,我只引入了一个logback-classic,自动就将另外两个 logback-core、slf4j这两个包也一起拉进来了
特性2:坐标引入项目中其他模块(在本项目一个模块中将另一个项目当依赖引进来)
-  
创建了两个meaven模块:test_model和test_model02
通过下面这样就可以在test_model中引入了test_model02,并且test_model02中原理引入的jar包这些也会被引入到test_model
这就是maven的依赖传递的强大之处 -  
注意,千万不要循环依赖了

 
下面这个显示图就可以展示依赖图:
 
 
(3)排除指定依赖
参考视频
 在依赖传递中,我们有时候会有一些依赖冲突问题,那么我们可以将冲突的版本依赖排除出去
- 排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。

 
(4)依赖范围
参考视频
 依赖的jar包,默认情况下,可以在任何地方使用。可以通过<scope>…</scope>设置其作用范围
- 作用范围: 
- 主程序范围有效。(main文件夹范围内)
 - 测试程序范围有效。(test文件夹范围内)
 - 是否参与打包运行。(package指令范围内)

<scope>…</scope>设置其作用范围

 
 
(5)生命周期(编译、打包)
参考视频
 Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一
 
- Maven中有3套相互独立的生命周期 
- clean:清理工作
 - default:核心工作,如:编译、测试、打包、安装、部署等
 - site:生成报告、发布站点等
 
 
每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。
 
 我们只关注其中的五个
- 生命周期阶段 
- clean:移除上一次构建生成的文件(就是删除运行产生的target这个文件夹:将上一次编译的所有字节码文件删除了就)
 - compile:编译项目源代码(编译成字节码文件,会发现生成了一个target文件夹)
 - test:使用合适的单元测试框架运行测试(junit)(就是运行当前项目中的所有单元测试里面的方法)
 - package:将编译后的文件打包,如:jar、war等(将模块打包成jar文件放在target文件夹下)
 - install:安装项目到本地仓库(就是将打包好的jar包安装到maven的本地仓库中)
在IDEA中的maven面板中可以看到

 
 - 执行指定生命周期的两种方式 
- 在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行
 - 在命令行中,通过命令执行

 
 
二、maven中使用日志
- step1:
现在pom文件中导入依赖 
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version>
</dependency>
 
- step2:在 src/main/resources 下添加 Logback 配置文件 logback.xml
 
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 日志存放路径 --><property name="log.path" value="logs/rtvc-pattern" /><!-- 日志输出格式 --><property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>DEBUG</level><!-- 匹配时的操作:接收(记录) --><!-- <onMatch>ACCEPT</onMatch> --><!-- 不匹配时的操作:拒绝(不记录) --><!-- <onMismatch>DENY</onMismatch> --></filter></appender><appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/error.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 系统模块日志级别控制  --><logger name="com.cxmt" level="info" /><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn" /><root level="info"><appender-ref ref="console" /></root><!--系统操作日志--><root level="info"><appender-ref ref="file_info" /><appender-ref ref="file_error" /></root>
</configuration>
 
- step3:代码中使用
特别注意这两个包别导错了,自动导包可能会导入成其他的
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 
package cn.hjblogs;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** Hello world!**/public class App 
{private static final Logger logger = LoggerFactory.getLogger(App.class);public static void main( String[] args ){logger.info("Hello World!111122");logger.error("Hello World!111122");logger.info("Logback configuration is loaded.");logger.error("This is a test error log.");logger.info("Logback configuration is loaded.");logger.error("This is a test error log.");logger.info("Logback configuration is loaded.");logger.error("This is a test error log.");}
} 

 可以看到控制台就会生成日志,本地相对路径对应的目录下也会生成logs文件下面记录日志。
 如果部署到服务器上,服务器上的部署的当前工作目录也会生成这个logs目录,下面记录日志;这个是一种很重要的定位bug手段。
三、maven进阶:高级使用
相关文章:
6 maven工具的使用、maven项目中使用日志
文章目录 前言一、maven:一款管理和构建java项目的工具1 基本概念2 maven的安装与配置(1)maven的安装(2)IDEA集成Maven配置当前项目工程设置 maven全局设置 (3)创建一个maven项目 3 pom.xml文件…...
Day82:创建图形界面(GUI)
在 Python 中,我们可以使用 Tkinter(标准 GUI 库)来创建图形用户界面(GUI)。Tkinter 提供了一系列工具和控件,使开发者可以轻松地创建窗口、按钮、输入框等界面组件。 1. Tkinter 简介 Tkinter 是 Python 内置的 GUI 库,使用它可以创建窗口应用程序,而无需安装额外的库…...
字节跳动大模型应用 Go 开发框架 —— Eino 实践
前言 开发基于大模型的软件应用,就像指挥一支足球队:组件是能力各异的队员,编排是灵活多变的战术,数据是流转的足球。Eino 是字节跳动开源的大模型应用开发框架,拥有稳定的内核,灵活的扩展性,完…...
【Golang学习之旅】Go + MySQL 数据库操作详解
文章目录 前言1. GORM简介2. 安装GORM并连接MySQL2.1 安装GORM和MySQL驱动2.2 连接MySQL 3. GORM数据模型(Model)3.1 定义User结构体3.2 自动迁移(AutoMigrate) 4. GORM CRUD 操作4.1 插入数据(Create)4.2 …...
Http 的响应码有哪些? 分别代表的是什么?
HTTP 状态码分为多个类别,下面是常见的 HTTP 状态码及其含义,包括 3xx 重定向状态码的详细区别: 📌 HTTP 状态码分类 分类状态码范围说明1xx100-199信息性状态码,表示请求已被接收,继续处理2xx200-299成功…...
深入解析 Linux 系统中 Cron 定时任务的配置与管理
在 Linux 和类 Unix 系统中,cron 是一个非常强大的工具,用于定时执行各种任务,例如自动备份、定时运行脚本和定期清理日志文件。通过合理配置 cron,你可以让很多系统维护任务自动化,从而减轻日常管理的压力。而 cronta…...
关于 IoT DC3 中设备(Device)的理解
在物联网系统中,设备(Device)是一个非常宽泛的概念,它可以指代任何能够接入系统并进行数据交互的实体。包括但不限于手机、电脑、服务器、网关、硬件设备甚至是某些软件程序等所有能接入到该平台的媒介。 内容 定义 目的 示例 …...
golang 版 E签宝请求签名鉴权方式
E签宝 请求签名鉴权方式说明 package utilsimport ("crypto/hmac""crypto/md5""crypto/sha256""encoding/base64""fmt""github.com/gogf/gf/v2/util/gconv" )type Sign struct {secret string }func NewSign(sec…...
QTreeView和QTableView单元格添加超链接
QTreeView和QTableView单元格添加超链接的方法类似,本文仅以QTreeView为例。 在QTableView仿Excel表头排序和筛选中已经实现了超链接的添加,但是需要借助delegate,这里介绍一种更简单的方式,无需借助delegate。 一.效果 二.实现 QHTreeView.h #ifndef QHTREEVIEW_H #def…...
【WB 深度学习实验管理】使用 PyTorch Lightning 实现高效的图像分类实验跟踪
本文使用到的 Jupyter Notebook 可在GitHub仓库002文件夹找到,别忘了给仓库点个小心心~~~ https://github.com/LFF8888/FF-Studio-Resources 在机器学习项目中,实验跟踪和结果可视化是至关重要的环节。无论是调整超参数、优化模型架构,还是监…...
SSM开发(十一) mybatis关联关系多表查询(嵌套查询,举例说明)
目录 一、背景介绍 二、一对一查询(嵌套查询) 三、一对多查询(嵌套查询) 四、嵌套查询效率评估 注:关联查询则是指在一个查询中涉及到多个表的联合查询 一、背景介绍 当对数据库的操作涉及到多张表,这在面向对象语言如Java中就涉及到了对象与对象之间的关联关系。针对多…...
The Simulation技术浅析(六):机器学习
机器学习(Machine Learning)是模拟技术(The Simulation)的重要组成部分,通过从数据中自动学习规律和模式,机器学习能够提升模拟系统的智能化水平,增强其预测、决策和优化能力。 一、监督学习(Supervised Learning) 1. 基本原理 监督学习是指利用标注数据(即输入数…...
apache-poi导出excel数据
excel导出 自动设置宽度,设置标题框,设置数据边框。 excel导出 添加依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>…...
唯一值校验的实现思路(续)
本文接着上一篇文章《唯一值校验的实现思路》,在后端实现唯一值校验。用代码实现。 /*** checkUniqueException[唯一值校验]** param entity 新增或编辑的学生实体* param insert 是否新增,如果是传入true;反之传入false* return void* date…...
ffmpeg基本用法
一、用法 ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... 说明: global options:全局选项,应用于整个 FFmpeg 进程,它们通常不受输入或输出部分的限制。 infile options:输入选…...
MYSQL第四次
目录 题目分析 代码实现 一、修改 Student 表中年龄(sage)字段属性,数据类型由 int 改变为 smallint 二、为 Course 表中 Cno 字段设置索引,并查看索引 三、为 SC 表建立按学号(sno)和课程号ÿ…...
联德胜w801开发板(六)手机蓝牙设置wifi名称和密码
一、概述 W801 是一款集成了 Wi-Fi 和蓝牙功能的芯片,本文将介绍如何利用 W801 的蓝牙功能,实现手机 APP 通过蓝牙配置 W801 连接的 Wi-Fi 名称和密码(即配网功能)。 二、文档查看: demo使用手册这里很清楚…...
Linux:库
目录 静态库 动态库 目标文件 ELF文件 ELF形成可执行 ELF可执行加载 ELF加载 全局偏移量表GOT(global offset table) 库是写好的,成熟的,可以复用的代码 现实中每个程序都要依赖很多的基础的底层库,不可能都是从零开始的 库有两种…...
向量数据库简单对比
文章目录 一、Chroma二、Pinecone/腾讯云VectorDB/VikingDB三、redis四、Elasticsearch五、Milvus六、Qdrant七、Weaviate八、Faiss 一、Chroma 官方地址: https://www.trychroma.com/优点 ①简单,非常简单构建服务。 ②此外,Chroma还具有自…...
大模型基本原理(四)——如何武装ChatGPT
传统的LLM存在几个短板:编造事实、计算不准确、数据过时等,为了应对这几个问题,可以借助一些外部工具或数据把AI武装起来。 实现这一思路的框架包括RAG、PAL、ReAct。 1、RAG(检索增强生成) LLM生成的内容会受到训练…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
