学习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
下载到本地仓库
-
坐标
- groupId , artifactId , version 三个元素是项目的坐标,唯一的标识这个项目。
- groupId 项目所在组,一般是组织或公司
- artifactId 是当前项目在组中的唯一ID;
- version 表示版本,SNAPSHOT表示快照,表示此项目还在开发中,不稳定。
- groupId 和实际项目不一定是一一对应的,maven 有模块的概念,例如 spring-core, spring-context…;groupId 也不应该只对应公司或组织名,建议具体到项目名,因为公司或者组织下有多个项目,而artifactId只能代表模块名。
- 依赖范围
- compile : 编译,测试,运行都有效,默认的选择
- test : 测试有效,例如junit
- provided : 编译,测试有效,例如 servlet ,运行时容器会提供实现
- runtime : 运行和测试有效,例如 jdbc,编译时只需相应的接口,测试和运行时才需要具体的实现
- 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
是指仓库中最后的一个非快照版本