6 maven工具的使用、maven项目中使用日志

news2025/2/8 7:30:19

文章目录

  • 前言
  • 一、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/
      • 远程仓库(私服): 一般由公司团队搭建的私有仓库。

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环境变量
	<!-- 配置华为的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进阶:高级使用

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

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

相关文章

GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读

一、43698-2024标准图解 https://mmbiz.qpic.cn/sz_mmbiz_png/rwcfRwCticvgeBPR8TWIPywUP8nGp4IMFwwrxAHMZ9Enfp3wibNxnfichT5zs7rh2FxTZWMxz0je9TZSqQ0lNZ7lQ/640?wx_fmtpng&fromappmsg 标准在线预览&#xff1a; 国家标准|GB/T 43698-2024 相关标准&#xff1a; &a…

CF 278A.Circle Line

题目分析 输入n个数据作为路径&#xff0c;求从a到b的最短距离&#xff0c;需要将其相成一个圆圈&#xff0c;既可以从小往大走又可以从大往小走 思路分析 依然将数据存为数组&#xff0c;通过下标进行操作&#xff0c;既然说了有两种方式那就计算两种方式哪个更快就输出谁 代…

本地部署deepseek简单教程

部署deepseek&#xff0c;首先需要知道deepseek官网地址&#xff1a;DeepSeek 第一步&#xff1a;Ollama 去ollama下载对应的版本&#xff0c;我的电脑是window 在这里可以看到关于deepseek相关 第二步&#xff0c;下载完ollama无脑下一步就可以 这样属于安装成功 第三步&…

UnityShader学习笔记——多种光源

——内容源自唐老狮的shader课程 目录 1.光源类型 2.判断光源类型 2.1.在哪判断 2.2.如何判断 3.光照衰减 3.1.基本概念 3.2.unity中的光照衰减 3.3.光源空间变换矩阵 4.点光源衰减计算 5.聚光灯衰减计算 5.1.聚光灯的cookie&#xff08;灯光遮罩&#xff09; 5.2.聚…

电脑右下角小喇叭没反应怎么回事,快速解决方案

当电脑右下角的小喇叭&#xff08;音量图标&#xff09;没有反应时&#xff0c;可以尝试以下快速解决方案&#xff1a; 一、基础检查与操作 检查键盘音量键&#xff1a; 按下键盘上的音量增加或减少键&#xff0c;或尝试Fn音量键&#xff08;部分笔记本需组合键&#xff09;&a…

Mysql基于binlog主从同步配置

主配置&#xff1a; 修改配置文件&#xff1a;/etc/my.cnf 添加server-id1 重启MySQL服务&#xff1a;systemctl restart mysqld 创建用户并授权&#xff1a; mysql> create user rep192.168.79.% identified with mysql_native_password by 123456; Query OK, 0 rows aff…

Docker Desktop安装到其他盘

Docker Desktop 默认安装到c盘&#xff0c;占用空间太大了&#xff0c;想给安装到其他盘&#xff0c;网上找了半天的都不对 正确安装命令&#xff1a; start /w "" "Docker Desktop Installer.exe" install --installation-dirF:\docker命令执行成功&am…

NetCore Consul动态伸缩+Ocelot 网关 缓存 自定义缓存 + 限流、熔断、超时 等服务治理

网关 OcelotGeteway 网关 Ocelot配置文件 {//单地址多实例负载均衡Consul 实现动态伸缩"Routes": [{// 上游 》》 接受的请求//上游请求方法,可以设置特定的 HTTP 方法列表或设置空列表以允许其中任何方法"UpstreamHttpMethod": [ "Get", &quo…

ubuntu 本地部署deepseek r1 蒸馏模型

本文中的文件路径或网络代理需要根据自身环境自行删改 一、交互式chat页面 1.1 open-webui 交互窗口部署&#xff1a;基于docker安装&#xff0c;且支持联网搜索 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离线操作。它支持各种 LLM…

go语言中的反射

为什么会引入反射 有时我们需要写一个函数&#xff0c;这个函数有能力统一处理各种值类型&#xff0c;而这些类型可能无法共享同一个接口&#xff0c;也可能布局未知&#xff0c;也有可能这个类型在我们设计函数时还不存在&#xff0c;这个时候我们就可以用到反射。 空接口可…

JUC学习笔记02

文章目录 JUC笔记2练习题&#xff1a;手写线程池代码解释&#xff1a;AdvancedThreadPool 类&#xff1a;WorkerThread 内部类&#xff1a;AdvancedThreadPoolExample 类&#xff1a; 线程池的思考CPU密集型IO密集型 练习题&#xff1a;手写自动重试机练习题&#xff1a;手写定…

【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构

论文原文链接&#xff1a;DeepSeek-V3/DeepSeek_V3.pdf at main deepseek-ai/DeepSeek-V3 GitHub 特别声明&#xff0c;本文不做任何商业用途&#xff0c;仅作为个人学习相关论文的翻译记录。本文对原文内容直译&#xff0c;一切以论文原文内容为准&#xff0c;对原文作者表示…

C++(进阶五)--STL--用一颗红黑树封装map和set

目录 1.红黑树源码&#xff08;简略版&#xff09; 2.模板参数的控制 3.红黑树的结点 4.迭代器的实现 正向迭代器 反向迭代器 5.set的模拟实现 6.map的模拟实现 7.封装完成后的代码 RBTree.h mymap.h myset.h 1.红黑树源码&#xff08;简略版&#xff09; 下面我们…

飞算JavaAI :AI + 时代下的行业趋势引领者与推动者

在科技飞速发展的当下&#xff0c;AI 时代正以前所未有的速度重塑着各个行业的格局&#xff0c;而软件开发领域更是这场变革的前沿阵地。在众多创新力量之中&#xff0c;飞算JavaAI 脱颖而出&#xff0c;宛如一颗璀璨的新星&#xff0c;凭借其独树一帜的特性与强大功能&#x…

【重新认识C语言----结构体篇】

目录 -----------------------------------------begin------------------------------------- 引言 1. 结构体的基本概念 1.1 为什么需要结构体&#xff1f; 1.2 结构体的定义 2. 结构体变量的声明与初始化 2.1 声明结构体变量 2.2 初始化结构体变量 3. 结构体成员的访…

一种解决SoC总线功能验证完备性的技术

1. 前言 通过总线将各个IP通过总线连接起来的SoC芯片是未来的大趋势&#xff0c;也是缩短芯片开发周期&#xff0c;抢先进入市场的常用方法。如何确保各个IP是否正确连接到总线上&#xff0c;而且各IP的地址空间分配是否正确&#xff0c;是一件很棘手的事情。本文提出了一种新…

【Linux系统】线程:线程库 / 线程栈 / 线程库源码阅读学习

一、线程库 1、线程库介绍&#xff1a;命名与设计 命名&#xff1a;线程库通常根据其实现目的和平台特性进行命名。例如&#xff0c;POSIX标准定义了Pthreads&#xff08;POSIX Threads&#xff09;&#xff0c;这是一个广泛使用的线程库规范&#xff0c;适用于多种操作系统。此…

深度剖析 Redis:缓存穿透、击穿与雪崩问题及实战解决方案

一、缓存基本使用逻辑 在应用程序中&#xff0c;为了提高数据访问效率&#xff0c;常常会使用缓存。一般的缓存使用逻辑是&#xff1a;根据 key 去 Redis 查询是否有数据&#xff0c;如果命中就直接返回缓存中的数据&#xff1b;如果缓存不存在&#xff0c;则查询数据库&#…

如何使用el-table的多选框

对el-table再次封装&#xff0c;使得功能更加强大&#xff01; 本人在使用el-table时&#xff0c;因为用到分页&#xff0c;导致上一页勾选的数据在再次返回时&#xff0c;没有选中&#xff0c;故在原有el-table组件的基础之上再次进行了封装。 1.首先让某些不需要勾选的列表进…

【工具变量】上市公司企业渐进式创新程度及渐进式创新锁定数据(1991-2023年)

测算方式&#xff1a; 参考顶刊《经济研究》孙雅慧&#xff08;2024&#xff09;老师的做法&#xff0c;用当期创新和往期创新的内容重叠度作为衡量渐进式创新程度的合理指标。通过搜集海量专利摘要&#xff0c;测算当前专利申请和既有专利的内容相似度&#xff0c;反映企业在…