Maven(源码+lw+部署文档+讲解等)

ops/2024/9/23 22:55:28/

文章目录

  • 前言
  • Maven
    • 功能
      • 项目构建
      • 依赖管理
    • 安装Maven
      • 下载
      • 解压
      • 配置环境变量
      • 配置maven
      • 配置idea中maven的配置
    • 创建maven工程
      • 手动
      • 使用idea来创建
    • 使用Maven工程
      • 项目构建
    • 依赖管理
      • 如何导包
      • scope的传递范围
      • 依赖传递
      • 依赖冲突
    • 补充配置
    • 使用maven来开发
    • project和module的区别与联系
  • 源码获取

前言

🌞博主介绍:✌全网粉丝15W+,CSDN特邀作者、211毕业、高级全栈开发程序员、大厂多年工作经验、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导✌🌞

👇🏻 精彩专栏 推荐订阅👇🏻
2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐✅

2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐✅

Java精品实战案例《500套》

微信小程序项目精品案例《500套》

💯文末获取源码+数据库💯
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

Maven

功能

项目构建

项目构建是指一个项目从编写代码,到编译,到测试,到打包,到上线等一系列的步骤。

依赖管理

项目管理其实就是可以帮助我们去管理我们的项目。

其实就是管理我们的项目的依赖。帮助我们把项目的依赖集中的管理起来。

安装Maven

下载

注意,Maven的版本和Idea的版本以及JDK的版本是对应的。

JDK: JDK8

IDEA: 2018.3.6

Maven: 3.5.3

解压

安装的软件的解压路径里面不要有中文,不要有特殊字符(例如空格 等等)

配置环境变量

在path中添加根目录的路径名

mvn -v用来检测

maven_54">配置maven

  • 本地仓库

  • 中央仓库

  • 配置本地仓库

maven的根目录下的conf文件夹中有一个settings.xml配置文件,需要配置一个 本地仓库

<localRepository>D:\maven\repo</localRepository>
  • 配置中央仓库

在 标签里面加入以下内容

<mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

maven_82">配置idea中maven的配置

maven_88">创建maven工程

手动

maven项目的要求:

java">1. 所有的源代码都放在 src/main/java 路径下
2. 所有的配置文件都放在 src/main/resources 路径下
3. 所有的测试案例源代码都放在 src/test/java路径下
4. 所有的测试需要的配置文件都放在 src/test/resources 路径下
  1. 每一个maven项目在项目的根目录下必须得有一个pom.xml文件
  2. maven的项目编译的文件存放的路径必须是 项目根目录下的target文件夹
  • 新建一个java项目

  • 新建文件夹

  • 标记对应的文件夹

    在项目结构中标记

  • 新建一个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"><!-- 上面的这些路径其实就是一些 约束文件这些约束文件其实就是定义了这个xml文件中可以出现什么标签,以及标签出现的顺序--><!-- 不用改 --><modelVersion>4.0.0</modelVersion><!-- maven 项目的坐标 --><!-- 组织名 通常来说是域名反转--><groupId>com.cskaoyan</groupId><!-- 应用名 你这个项目的名字 --><artifactId>mybatis-demo</artifactId><!-- 版本号 0.0.1 0.x 的版本通常来说是不稳定版x.x.x-beta 线上测试版(不稳定的)x.x.x- SNAPSHOT 快照版 可以理解为稳定版--><version>1.0.0</version>
    </project>
    
    • 让idea识别你的项目为maven工程
      • 右键 pom.xml文件,add as maven project

使用idea来创建

只需要注意项目名称和artifactId保持一致

使用Maven工程

项目构建

Maven可以用来管理项目的声明周期。

Maven定义的声明周期 包括了 清理、编译、测试、打包、安装、站点部署等一套完整的流程。

执行命令有几种方式:

  • 打开cmd窗口,进入到这个module的根目录下,执行命令
  • 打开idea,在右边有一个控件栏,打开lifecycle,双击执行对应的指令
  • 打开idea,在下面有一个 terimal插件栏,打开,执行对应的命令

maven的项目构建的流程是从validate开始的。

例如我们要去执行package,会先执行 validate -> compile -> test - > package

是有一个流程的先后顺序的。

  1. 清理 帮助我们去删除编译生成的target文件夹

    mvn clean

  2. 编译 编译其实就是帮助我们把.java 文件变成 .class文件,并且把对应的配置文件也复制过去

    mvn compile

    编译之后有对应的目录

    注意在编译完成后,所有的java文件和配置文件都会放入classes文件中

    java文件相当于是源代码路径,这和普通的src是一致的

  3. 测试 测试其实就是去运行这个项目中所有的测试类的测试方法

    mvn test

    在执行mvn test的时候,会先去编译,执行所有的测试类里面的测试方法

  4. 打包 打包其实就是把我们项目打包成 .jar (jar 包) 或者是 .war (war 包)

    mvn package

    默认是打jar包,如果需要打war包,那么就去修改 pom.xml文件的配置

<!-- 默认配置的是 jar -->
<packaging>war</packaging>

​ 5.安装 其实就是把打包生成的jar包复制到本地仓库中去

mvn install

  1. 部署 站点生成,其实就是帮助我们把本地仓库中的jar包上传到服务器上去

    mvn deploy

    这个命令不是重点,因为在公司中,一般不采用mvn来部署项目(jenkins\ docker \ k8s )

依赖管理

如何导包

  • 找到对应jar包的坐标

    maven的网站中搜索 https://mvnrepository.com/

  • 复制坐标到pom.xml文件中

scope的传递范围

cope指的是这个依赖的包的作用域

  • compile

    这个是默认的作用域。在编译的时候起作用,在任何时候任何地方都是有效的。

  • provided

    编译的时候有效、测试的时候有效,但是运行的时候失效

  • test

    这个是测试案例的作用域,这个test修饰的依赖只能在 src/test/java 路径下才能生效

  • runtime

    runtime修饰的jar包,在编译的时候,不起作用,只有在运行的时候,才会起作用

    典型的案例 就是mysql的驱动包。

依赖传递

项目A的依赖中有项目B,项目B的依赖有项目C,所以项目A的依赖中也有项目C

依赖冲突

在同一个项目中对于同一个jar包的不同版本,我们只需要一个版本,如果导入多个版本就会造成冲突

  • 声明优先原则

    谁写在前面就以谁为准

  • 就近原则

    谁的传递次数最少以谁为准

  • 手动排除

  • 提取常量

补充配置

需要把以下的配置添加到 settings.xml文件中,主要是去指定我们使用maven编译的时候jdk的版本

<profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties>
</profile>

解决test方法乱码

<build><plugins><!-- 解决maven test命令时console出现中文乱码乱码 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.7.2</version><configuration><forkMode>once</forkMode><argLine>-Dfile.encoding=UTF-8</argLine><!-- <systemProperties> --><!-- <property> --><!-- <name>net.sourceforge.cobertura.datafile</name> --><!-- <value>target/cobertura/cobertura.ser</value> --><!-- </property> --><!-- </systemProperties> --></configuration></plugin></plugins></build>

maven_316">使用maven来开发

和之前不一样的地方

  • 导包方式不一样

  • 代码写的位置、配置文件存放的位置不一样

  • 读取配置文件的输入流的方式不一样

    现在的读取方式:

java">// 初始化数据源static {Properties properties = new Properties();try {// 绝对路径的写法,不好
//            InputStream in = new FileInputStream("E:\\cskaoyan\\35workspace\\workspace_35\\druid-maven-demo\\src\\main\\resources\\druid.properties");// 我们在maven的项目中,需要使用类加载器去找文件的路径ClassLoader classLoader = DruidUtils.class.getClassLoader();// 类加载去找文件的时候,因为类加载是从classes文件夹开始加载的,所以会从classes文件夹下开始加载InputStream inputStream = classLoader.getResourceAsStream("druid/druid.properties");//            URL url = classLoader.getResource("druid/druid.properties");
//            String path = url.getPath();
//
//            System.out.println("path:" + path);// /E:/cskaoyan/35workspace/workspace_35/druid-maven-demo/target/classes/druid.propertiesproperties.load(inputStream);} catch (IOException e) {e.printStackTrace();}

project和module的区别与联系

  • project

    一个项目是IDEA开发工作的顶级组织单位。在其完成的形式中,一个项目可能代表一个完整的软件解决方案

    项目是以下内容的集合:

    • 你的工作成果:源代码、脚本、配置文件、文档、工件等。
    • 用于开发、编译、运行和测试代码的SDK和库。
    • 在项目上下文中表示你的工作偏好设置

    一个项目有一个或者多个模块作为其部件

  • module

    • 模块是项目的一部分,你可以独立的编译、运行、测试和调试。
    • 模块是一种在维护公共项目配置的同事降低大型项目复杂性的方法。
    • 模块可以重复使用:如果需要,可以再多个项目中包含一个模块。

总结一下:Project是IDEA的最顶级的结构单元,project只是起到了一个项目定义的功能,类似于工作空间的概念,这个工作空间可以去配置你的IDEA的一些公共配置,例如SDK、代码库等。module是project的一部分,可以用来单独编译运行等,每一个module项目运行的时候都是一个单独的Java进程。IDEA创建项目的时候会默认创建一个同名的module,实际上我们开发写代码都是在开发这个module。

源码获取

有疑问私信询问我即可~
大家点赞、收藏、关注、评论啦
精彩专栏推荐订阅:在下方专栏👇🏻
Java精品实战案例《500套》
微信小程序项目精品案例《500套》


http://www.ppmy.cn/ops/98685.html

相关文章

PPTP、L2TP、IPSec、IPS 有什么区别?

随着互联网的发展&#xff0c;保护网络通信的安全越来越重要。PPTP、L2TP、IPSec、IPS是常见的网络安全协议和技术&#xff0c;在保护网络通信安全方面发挥着不同的作用和特点。下面介绍PPTP、L2TP、IPSec、IPS之间的区别。 点对点隧道协议&#xff08;PPTP&#xff09;是一种…

EXCEL 分组后找出满足条件的行拼接起来

Excel某表格有四列&#xff0c;其中第2列是分组列。 ABCD11a1yet22a2done33a3yet44b1done55b2done66b3done77b4yet88b5done 现在要按第2列分组&#xff0c;找到每组第4列等于"done"的行&#xff0c;将这些行的第3列用逗号拼起来&#xff0c;再与分组名、行号组成新…

LVS+Keepalived 高可用群集

目录 一、Keepalived 概述 1、VRRP 1.1、VRRP协议概念 1.2、VRRP工作原理 1.3、VRRP抢占模式 1.3.1、抢占模式的概念 1.3.2、抢占模式的优先级比较 1.3.3、抢占模式的应用场景 2、Keepalived概述 2.1、Keepalived作用 2.2、Keepalived工作原理 2.3、Keepalived 体系…

ZooKeeper 的特性及其在分布式系统中的锁应用

示例&#xff1a;分布式锁的实现 在分布式系统中&#xff0c;多个服务可能需要访问共享资源&#xff08;如数据库、文件等&#xff09;&#xff0c;为了避免资源争用导致数据不一致&#xff0c;需要对这些资源进行加锁。ZooKeeper 提供了实现分布式锁的强大工具。 使用场景 …

[000-01-022].第09节:RabbitMQ中的消息分发策略

我的后端学习大纲 RabbitMQ学习大纲 1.不公平分发&#xff1a; 1.1.什么是不公平分发&#xff1a; 1.在最开始的时候我们学习到 RabbitMQ 分发消息采用的轮训分发&#xff0c;但在某种场景下这种策略并不是很好&#xff0c;比方说有两个消费者在处理任务&#xff0c;其中有个…

RPC 运行时,第二次:发现新的漏洞

介绍 2022 年 4 月 12 日,微软发布了针对远程过程调用 (RPC) 运行时库 (rpcrt4.dll) 中三个漏洞的补丁。这些漏洞的 CVE 编号为:CVE-2022-26809、CVE-2022-24492和CVE-2022-24528。受影响的操作系统包括 Windows 7、8、10 和 11,以及 Windows Server 2008、2012、2019 和 2…

JDK15.0.2安装

JDK15.0.2安装 1. 下载 下载地址&#xff1a; https://www.oracle.com/java/technologies/downloads/archive/ 通过百度网盘分享的文件&#xff1a;jdk-15.0.2_windows-x64_bin.exe 链接&#xff1a;https://pan.baidu.com/s/15AOcTby3YLSp26_btCkEIw 提取码&#xff1a;vs7…

Gradle

Gradle 1.Gradle是什么 官话&#xff1a;Gradle 是一种先进的构建工具&#xff0c;它被广泛应用于 Android 开发。Gradle 提供了强大的构建功能、灵活的配置和丰富的插件生态。 2.基本概念 在了解 Gradle 的用法之前&#xff0c;首先需要了解以下基本概念&#xff1a; Pro…