maven

学习maven的一天
一.maven介绍
有pom.xmlw文件的一定maven工程
1.使用需求:

  • 软件开发中遇到的问题
    1. jar包的依赖与管理
    项目中有很多jar包:

问题:不能确定jar包的完全正确性、不同技术框架版本的管理、jar包的依赖
在这里插入图片描述
2.自动构建项目
软件开发:可行性分析,需求分析,软件设计,软件开发,发布,运维
软件构建:软件已经开发完毕,需要构建成一个产品进行发布
构建步骤:(生命周期)
清除–> 编译–>测试–>报告–>打包(jar\war)–>安装–>部署到远程
maven可以通过一个命令实现自动构建软件项目

1.清除:清除前在项目别写过程中保留的一些字节码文件等等
2.编译:重新编译或字节码文件
3.测试:运行看有没有bug
4.报告:打测试报告,有问题则修改
5.安装:安装到本地
6.部署:部署项目到远程

3.maven介绍
-Maven翻译为"专家",“内行”,它是apache旗下的一个纯Java开发的开源工具 ,基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片段能管理一个项目的构建,报告,依赖管理
- pom(项目对象模型)
- 软件构建的生命周期
清除–> 编译–>测试–>报告–>打包(jar\war)–>安装–>部署到远程
- 介绍: Maven是一个采用纯Java编写的开源项目管理工具,
Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,
所有的项目配置信息都被定义在一个叫做POM.xml的文件中,
通过该文件Maven可以管理项目的整个生命周期,
包括清除、编译,测试,报告、打包、部署等等。
-maven也可以被用于构建和管理各种项目,例如:C#,Ruby,Scala和其他语言编写的项目.maven曾是Jakarta项目的子项目,现为有Apache软件基金会主持独立Apache项目
在这里插入图片描述
4.Maven 功能

  • 构建
  • 文档生成
  • 报告
  • 依赖
  • SCMs
  • 发布
  • 分布
  • 邮件列表

5.Maven的特点

  • 项目设置遵循统一规则

  • 任意工程中共享

  • 依赖管理包裹自动更新

  • 一个庞大且不断增长的库

  • 可扩展,能轻松编写Java或脚本语言的插件

  • 只需要很少或不需要额外配置即可访问新功能
    基于模型构建-Maven能够将任意数量的项目构建到预定义的输出类型中,如JAR,WAR或基于项目源数据的分布,而不需要在大多数情况下执行的脚本
    项目信息的一致性站点- 使用与构建过程关于项目开发的元数据,maven 能够生成一个网站或PDF,包括您要添加的任何文档,并添加到项目开发状态的标记报告中
    发布管理和发布独立的输出 - Maven将不需要额外数据的配置,就可以与源代码管理系统(如Subvention或Git)集成,并可以基于某个标签管理项目的发布,他可以将其发布到分分发位置供其他项目使用Maven能够发布单独的输出,如JAR,包含其他依赖和文档的归档,或者作为元代码发布
    向后兼容性- 可以轻松的从旧版Maven的多个模块移植到Maven 3中
    子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号
    并行构建- 编译的速度能普遍提高20-50%
    更好的报错报告- Maven改进了错误报告,为您提供了Maven wiki页面的链接,可以点击链接查看错误的完整描述
    二,下载安装
    1.下载地址:https://maven.apache.org/
    2.配置环境变量
    在这里插入图片描述
    在这里插入图片描述
    3.检测环境变量
    在这里插入图片描述
    4.配置本地仓库路径
    在这里插入图片描述
    在这里插入图片描述
    5.idea构建maven项目
    File -->new–>project
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    file–>settings
    在这里插入图片描述
    下载到本地仓库
    在这里插入图片描述

  • 坐标

  1. groupId , artifactId , version 三个元素是项目的坐标,唯一的标识这个项目。
  2. groupId 项目所在组,一般是组织或公司
  3. artifactId 是当前项目在组中的唯一ID;
  4. version 表示版本,SNAPSHOT表示快照,表示此项目还在开发中,不稳定。
  5. groupId 和实际项目不一定是一一对应的,maven 有模块的概念,例如 spring-core, spring-context…;groupId 也不应该只对应公司或组织名,建议具体到项目名,因为公司或者组织下有多个项目,而artifactId只能代表模块名。
  • 依赖范围
  1. compile : 编译,测试,运行都有效,默认的选择
  2. test : 测试有效,例如junit
  3. provided : 编译,测试有效,例如 servlet ,运行时容器会提供实现
  4. runtime : 运行和测试有效,例如 jdbc,编译时只需相应的接口,测试和运行时才需要具体的实现
  5. system : 编译,测试有效。使用此范围的依赖必须通过systemPath元素显式的指定依赖文件,因而
    此类依赖是不通过Maven仓库解析的,一般适合于本机测试环境下,依赖本地起的服务。
  • 构建
    maven支持许多种的应用程序类型,对于每一种支持的应用程序类型都定义好了一组构建规则和工具集。
  • 输出管理
    maven可以管理项目构建的产物,并将其加入到用户库中。这个功能可以用于项目组和其他部门之间的交付行为
  • 依赖关系
    maven对依赖关系的特性进行细致的分析和划分,避免开发过程中的依赖混乱和相互污染行为
    文档和构建结果
    maven的site命令支持各种文档信息的发布,包括构建过程的各种输出,javadoc,产品文档等。
  • 项目关系
    一个大型的项目通常有几个小项目或者模块组成,用maven可以很方便地管理
  • 移植性管理
    maven可以针对不同的开发场景,输出不同种类的输出* 结果
  • Project: 项目
    任何你想 build 的事物,Maven都会把它们当作是一个 Project。
    这些 Project 被定义为 POM(Project Object Model)。
    一个 Project 可以依赖其他的project,一个 project 也可以有多个子project组成。
  • POM:文档对象模型
    POM(pom.xml) 是 Maven 的核心文件,它是指示 Maven 如何工作的元数据文件,类似 ant 的 build.xml 文件。
    pom.xml 文件应该位于每个 Project 的根目录。
  • GroupId: 组织号
    顾名思义,这个应该是公司名或组织名。
  • ArtifactId:项目名
    构建出来的文件名,一般来说或,这个也是project名。
  • Packaging:打包
    项目打包的类型,可以是将jar、war、rar、ear、pom,默认是jar。
  • Version:版本
    项目的版本,项目的唯一标识由 groupId+artifactId+packaging+versionz 组成。
  • Dependency: 依赖
    为了能够 build 或运行,一个典型的java project会依赖其他的包,在Maven中,这些被依赖的包就被称为 dependency。
  • Plug-in:插件
    Maven是有插件组织的,它的每一个功能都是由插件提供的,主要的插件是由 java 来写的,但是他也支持 beanshell 和 ant 脚本编写的插件。
  • Repository:仓库
    仓库用来存放artifact的,可以是本地仓库,也可以是远程仓库,Maven是由一个默认的仓库
  • Snapshot:快照
    工程中可以(也应该)有这样一个特殊的版本:这个版本可以告诉Maven,该工程正在处于开发阶段,会经常更新(但还为发布)。当其他工程依赖此类型的artifact时,Maven会在仓库中寻找该artifact的最新版本,并自动下载、使用该最新版本。
  • Maven的"约束优于配置"
    所谓的"约束优于配置",在maven中并不是完全不可以修改的,他们只是一些配置的默认值而已。但是除非必要,并不需要去修改那些约定内容。
    每一个阶段的任务都知道怎么正确完成自己的工作,比如compile任务就知道从src/main/java下编译所有的java文件,并把它的输出class文件存放到target/classes中。
    对maven来说,采用"约定优于配置"的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。
  • Maven的版本规范
    maven在版本管理时候可以使用几个特殊的字符串 SNAPSHOT,LATEST,RELEASE。比如"1.0-SNAPSHOT"。各个部分的含义和处理逻辑如下说明:
    SNAPSHOT
    这个版本一般用于开发过程中,表示不稳定的版本。
    LATEST
    指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个snapshot版,具体看哪个时间最后。
    RELEASE
    是指仓库中最后的一个非快照版本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值