Maven 笔记

news2024/9/20 18:31:53

1. Maven 的简介

1.1 简介

Maven 这个词可以翻译为"专家","内行"。作为Apache 组织中的一个开源项目,主要服务于基于java平台的项目构建,依赖管理和项目信息管理。

无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷开发,maven 都能大显身手。

1.2 项目构建工具

编译、运行单元测试、生成文档、打包和部署等,就是构建。

(1)Ant 构建

最早的构建工具,基于IDE,大概是2000年有的,当时是最流行的java构建工具,不过它的xml脚本编写格式让xml文件特别大。对工程构建过程中的过程控制特别好。

(2)Maven 【JAVA】

项目对象模型,通过其描述信息来管理项目的构建,报告和文档的软件项目管理工具。它填补了Ant 缺点,Maven 第一次支持了从网络上下载的功能,仍然采用 XML 作为配置文件格式。 Maven 专注的是依赖管理,使用Java 编写。

(3)gradle

属于结合以上两个的优点,它继承了 Ant 的灵活 和 Maven 的生命周期管理,它最后被 google 作为了Android 御用管理工具。它最大的区别是不用 XML 作为配置文件格式,采用了DSL 格式,使得脚本更加简洁。

目前市面上Ant 是比较老的,所以一般是一些比较传统的软件企业公司使用,Maven使用Java编写,是当下大多数互联网公司都会使用的一个构建工具,中文文档也比较齐全,gradle 是用groovy 编写的,目前比较新型的构建工具,一些初创互联网公司会使用,以后会有很大的使用空间。

1.3 Maven 的四大特性

1.3.1 依赖管理系统

Maven 为Java 世界引入了一个新的依赖管理系统 jar 包管理, jar 升级时修改配置文件即可。在Java 的世界中,可以用 groupId、artifactId、version 组成的Coordination(坐标)唯一标识一个依赖。

任何基于Maven 构建的项目自身也必须定义这个三项属性,生成的包可以时jar 包,也可以是 war 包或者 jar 包,一个典型的依赖引用如下所示:

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

坐标属性的理解:

Maven 坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标。

(1)groupId

定义当前 Maven 项目隶属的实际项目-公司名称。(jar 包所在仓库路径)由于Maven中模块的概念,因此一个实际项目往往会被划分为很多模块。比如spring 是一个实际项目,其对应的Maven 模块会有很多,如Spring-core, spring-webmvc等。

(2)artifactId

该元素定义实际项目中的一个Maven 模块-项目名称。推荐的做法是使用实际项目名称作为artifactId的前缀。比如:spring-bean,spring-webmvc等。

(3)version

该元素定义Maven项目当前所在的版本。

Version格式:X.X.X-里程碑

比如:1.0.0-SNAPSHOT

第一个X:大版本,有重大变革

第二个X:小版本,修复bug,增加功能

第三个X:更新

里程碑版本:

SNAPSHOT:快照,开发版本

alpha: 内部测试

beta: 公开测试

Release | RC :发布版

GA :正常版本

1.3.2 多模块构建

在maven 中需要定义一个parent POM 作为一组module 的集合 POM。在该POM中可以使用<modules> 标签来定义一组子模块。parent POM 不会有什么实际构建产出。而parent POM 中的build 配置以及依赖配置会自动继承子module。

1.3.3 一致的项目结构

Ant 时代大家创建Java 项目目录时比较随意,然后通过Ant 配置指定哪些属于 source, 哪些属于testSource 等。而Maven 在设计之初的理念就是 Conversion over configuration(约定大于配置)。其制定了一套项目目录结构作为标准的Java 项目结构,解决不同IDE 带来的文件目录不一致问题。

1.3.4 一致的构建模型和插件机制

2. Maven 的安装配置和目录结构

2.1 Maven 的安装配置

(1)检查JDK的版本

JDK 版本 1.7 及以上,建议用1.8 及以上版本。

(2)下载Maven

下载地址:Maven – Download Apache Maven

建议下载3.0以上版本。

(3)解压下载包,Maven不需要执行文件来安装,直接将文件解压即可使用,但要配置系统环境变量,如下:

注:maven 解压后存放的目录不要包含中文和空格。

(4)cmd验证配置结果

Maven安装成功。

详细的Maven知识可以参考本人专栏中的文章:

(1) maven基础_menergy-CSDN博客

maven基础_龙泉太阿的博客-CSDN博客

(2) 搭建Nexus仓库管理器(私服)_menergy-CSDN博客

搭建Nexus仓库管理器(私服)_龙泉太阿的博客-CSDN博客

2.2 认识maven目录结构

Maven 项目目录结构:

目录

目的

${basedir}

项目根目录,存放pom.xml和所有的子项目

${basedir}/src/main/java

项目的java源代码

${basedir}/src/main/resources

项目的资源,比如说property文件

${basedir}/src/test/java

项目的测试类,比如说 Junit代码

${basedir}/src/test/resources

测试使用的资源

2.3 修改默认配置

(1)修改默认仓库位置

打开maven 目录 --> conf --> settings.xml

备份原版settings.xml为settings_bk.xml (非必须)

添加仓库位置配置:仓库时用来存放jar包的

注:仓库位置改为自己本机的指定目录,“/”不要写反。

(2)更改阿里镜像,加快依赖下载

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

注:第一次下载都会比较慢。

如果编译不成功,可能出现的问题:

  1. 不是使用管理员权限执行doc命令
  2. JDK环境配置有问题,检查或重装JDK
  3. 代码编写时,类里面没有设置包名(如果编译时类没有加包名,执行时也不需要加报名)

3. Maven 命令

maven 的命令格式: mvn [plugin-name]:[goal-name]

命令代表的含义:plugin-name 插件的 goal-name 目标

(1)常用命令:

命令

描述

mvn clean

清理项目生产的临时文件,一般时模块下的target目录

mvn compile

编译源代码,一般编译模块下的src/main/java mul

mvn package

项目打包工具,会在模块下的target 目录生成jar或war 等文件

mvn test

测试命令,或执行src/test/java/ 下junit的测试用例

mvn -version

显示版本信息

mvn install

将打包的jar或war文件复制到你的本地仓库中,供其它模块使用

mvn deploy

将打包的文件发布到远程仓库,提供其它人员进行下载依赖

mvn site

生成项目相关信息的网站

mvn eclipse:eclipse

将项目转换为Eclipse项目

mvn dependency:tree

打印处项目的整个依赖树

mvn archetype:generate

创建Maven 的普通java项目

mvn tomcat7:run

在Tomcat 容器中运行web应用

mvn jetty:run

调用Jetty 插件的 Run 目标在Jetty servlet 容器中启动 web应用

注:运行maven 命令的时候,首先需要定位到maven 项目的目录,也就是项目的pom.xml文件所在的目录。否则,必须通过参数来定义项目的目录。

(2)命令参数

上面列举的只是比较通用的命令,其实很多命令都可以携带参数以执行更精准的任务。

  1. -D 传入属性参数

例如:mvn package -Dmaven.test.skip=true

以 -D 开头,将maven.test.skip 的值设置为true,就是告诉maven 打包的时候跳过单元测试。同理,mvn deploy -Dmaven.test.skip=true 代表部署项目并跳过单元测试。

  1. -P 使用指定的Profile 配置

比如项目开发需要多个环境,一般为开发、测试、预发、正式4个环境,在pom.xml 中的配置如下:

<profiles>
    <profile>
        <!-- 开发环境 -->
        <id>dev</id>
        <properties>
            <!-- 一些自定义配置,如果选中改环境,则可以使用${env}或${profile}占位符使用,但必须配置build才会生效 -->
            <env>dev</env>
            <profile>dev</profile>
        </properties>
        <activation>
            <!-- 默认激活该profile节点-->
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>

    <profile>
        <!-- 测试环境 -->
        <id>test</id>
        <properties>
            <env>test</env>
            <profile>test</profile>
        </properties>
    </profile>

    <profile>
        <!-- 发布环境 -->
        <id>prod</id>
        <properties>
            <env>prod</env>
            <profile>prod</profile>
        </properties>
    </profile>
</profiles>

4. IDEA 编辑器集成Maven

5. Maven 项目的创建

5.1 创建 Java 项目

创建好后,因为第一次创建,所有下载依赖会比较慢:

注:如果右下角弹出提示框,选择“enable Auto-Import”(Maven 启动自动导入)

编译项目:

点击运行编译:

编译成功。

也可以从右边打开的窗口中直接执行maven 命令编译等:

5.2 创建 Web 项目

创建成功,但是发现一些相关的目录结构没有生成,可以手动创建:

(1)在src右键新建名为“java”的文件夹,如果java文件夹时蓝色,说明时包目录,如果不是,则右键“java”文件夹,如下:

设置后java文件夹变为蓝色,即为src/main/java 包目录。

(2) 如果没有resources 目录,也可以同上面的方式创建,然后设置为“Resources Root”类型。

(3) 根据需要也可以创建和设置“src/test/java”和“src/test/resources” 目录。

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

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

相关文章

Spring 5 笔记 - 入门与IOC

1. Spring 入门简介 Spring&#xff1a;轻量级、开源的JavaEE框架&#xff0c; 解决企业应用的复杂性。包括IOC和AOP两个核心部分。 IOC&#xff1a; 控制反转&#xff0c;把创建对象和对象之间的调用的过程都交给Spring 进行管理&#xff0c;使耦合度降低。 AOP&#xff1a…

Winform从入门到精通(38)—StatusStrip(史上最全)更新中

一、属性 1、Name 获取StatusStrip控件对象 2、AllowDrop 允许用户拖拽数据到控件上 3、AllowItemReorder 当用于按下alt键时,是否允许对项进行排列,如下图: 4、AllowMerge 5、Anchor 6、AutoSize 7、BackColor 设置StatusStrip的背景色 8、BackgroundImage 设置背…

R语言方差分析

R中的方差分析 介绍用于比较独立组的不同类型的方差分析&#xff0c;包括&#xff1a; 单因素方差分析&#xff1a;独立样本 t 检验的扩展&#xff0c;用于在存在两个以上组的情况下比较均值。这是方差分析检验的最简单情况&#xff0c;其中数据仅根据一个分组变量&#xff0…

垃圾回收器ZGC应用分析总结

目录 一、基本概述 二、基本关键技术知识总结 &#xff08;一&#xff09;三色标记法&#xff08;着色指针&#xff09; &#xff08;二&#xff09;读屏障 &#xff08;三&#xff09;多图映射 &#xff08;四&#xff09;简单场景说明ZGC并发 三、基本回收原理介绍 四…

PowerJob基本概念

本文来说下PowerJob的一些基本概念 文章目录 PowerJob概述PowerJob官网为什么选择PowerJob同类产品对比适用场景 PowerJob概述 PowerJob是新一代分布式任务调度与计算框架&#xff0c;支持CRON、API、固定频率、固定延迟等调度策略&#xff0c;提供工作流来编排任务解决依赖关系…

React框架第七课 语法基础课《第一课React你好世界》

React框架第七课 语法基础课《第一课React你好世界》 从这一课开始真正进入到React框架的基础语法学习&#xff0c;之前的前五课做个了解即可。 1 React框架的基本项目结构 ├── README.md 使用方法的文档 ├── node_modules 所有的依赖安装的目录 ├── package-lock.j…

[架构之路-181]-《软考-系统分析师》-19- 系统可靠性分析与设计 - 2-容错性: 软件容错技术

目录 前言&#xff1a; 1 9 . 4 软件容错技术 19.4.1 N 版本程序设计 1 . 与 通 常 软 件 开 发 过 程 的 区 别 2 . 其 他 需 要 注 意 的 问 题 19.4.2 恢复块方法 19.4.3 防卫式程序设计&#xff08;预防性设计&#xff09;》广泛使用 1 . 错误检测 2 . 破坏估计 …

【C++初阶】类与对象:6个默认成员函数-----构造函数和析构函数

我们在写代码的时候经常会忘记初始化和销毁&#xff0c;C的构造函数和析构函数就能避免这个问题。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成的成员函数称为默认成员函数。 一.构造函数 A.概念 1.构造函数是一个特殊的成员函数&#xff1b; 2.名字与…

React框架的第八课 语法基础课《第二课React框架中的事件》

React框架的第八课 语法基础课《第二课React框架中的事件》 React中的事件是指通过React建立的应用程序中处理用户交互的响应。React事件处理程序只是在组件上调用的JavaScript函数&#xff0c;以响应某些类型的操作或事件&#xff0c;例如点击、触摸、滚动等。 React组件可以使…

【P3】HTTP 接口设计

一、简答 HTTP 接口设计 HTTP请求默认值&#xff1a; 配置 http 请求的默认值&#xff0c;比如协议、主机、端口 HTTP信息头管理器&#xff1a; 配置 http 请求的头部参数 HTTP请求&#xff1a; 用于和业务交互 查看结果树&#xff1a; 用于结果展示 二、准备工作 慕慕生…

希尔排序详解(Shell Sort)

本文已收录于专栏 《算法合集》 一、简单释义 1、算法概念 希尔排序是插入排序的一种又称“缩小增量排序”&#xff0c;是直接插入排序算法的一种更高效的改进版本。希尔排序是把记录按下标的一定增量分组&#xff0c;对每组使用直接插入排序算法排序&#xff1b;随着增量逐渐…

【复杂网络建模】——Pytmnet进行多层网络分析与可视化

目录 一、Pymnet介绍 二、安装步骤 三、多层网络的构建 1、单层网络的构建 2、双层随机网络的构建和可视化 3、多路复用网络图的可视化 四、总结 一、Pymnet介绍 官网&#xff1a; Pymnet是一个用于网络分析和建模的Python库。它提供了各种网络分析工具&#xff0c;例…

shell的基础学习一

文章目录 一、shell的简介二、 Shell 变量三、Shell 传递参数总结 一、shell的简介 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供…

百胜中国:未来将实现强劲增长

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 收入分析与未来展望 在过去的三年里&#xff0c;百胜中国&#xff08;YUMC&#xff09;的收入一直受到疫情导致的旅行限制和封锁的影响。为了应对疫情造成的业务中断&#xff0c;该公司开始专注于外卖业务&#xff0c;并将…

中通快递财报预测:中通快递2023年收入和利润将大幅下降

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 市场对中通快递2023年的预测 卖方虽然预测中通快递&#xff08;ZTO&#xff09;在2023年的表现会很不错&#xff0c;但他们也预计中通快递今年的财务业绩将不会像去年那样好。 根据S&P Capital IQ的数据&#xff0c;卖…

【软考备战·希赛网每日一练】2023年5月1日

文章目录 一、今日成绩二、错题总结第一题第二题 三、知识查缺 题目及解析来源&#xff1a;2023年05月01日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 了解即可。 第二题 解析&#xff1a; 在序列基本有序时&#xff0c;快速排序基准元素起不到分…

第16章 变更管理

文章目录 16.1.2 项目变更的分类 50416.1.3 项目变更产生的原因 50516.2 变更管理的基本原则 50516.3 变更管理角色职责与工作程序 50616.3.1 角色职责 50716.3.2 工作程序 50716.4.1 变更管理操作要点 511 16.1 项目变更的基本概念 504 项目变更是指在信息系统项目的实施过程中…

【蓝桥杯】Python基础:经济基础决定上层建筑!

前言&#xff1a;今年4月第一次参加蓝桥杯比赛&#xff0c;选择的Python 研究生组赛道。在备赛过程中&#xff0c;发现经常会用到一些编程小技巧&#xff0c;因此笔者整理了一些蓝桥杯Python组编程基础常用的内容&#xff0c;以便日后备用。如果有小伙伴也觉得实用&#xff0c;…

1 对数器,二分查找,

文章目录 对数器二分查找**1. 有序序列二分查找****2. 在一个有序数组中&#xff0c;找<某个数最右侧的位置****3. 在一个有序数组中&#xff0c;找>某个数最左侧的位置****4. 无序序列二分查找 &#xff0c;求局部最小值** 对数器 对数器用于在自己的本地平台验证算法正…

百度、谷歌等搜索引擎高效搜索方法 —— 更快速搜索到你想要内容

一、常用搜索方法 1、限定标题 intitle 又被称为去广告搜索法&#xff0c;intitle命令&#xff0c;即in title&#xff08;在标题里&#xff09;返回的的结果是网页的标题包含该关键词。一般情况下搜索的关键词都会在标题里出现&#xff0c;使用intitle命令一般是在特殊需求下…