maven详解(一)

前言

因为现在开发的spring-boot项目都是通过maven来构建项目、管理jar包的,所以再次巩固下:

1、maven的pom.xml文件中各标签的作用;

2、maven通过在pom.xml的什么标签配置构建项目;

3、maven的setting.xml文件中各标签的含义;

4、简单回顾本地仓库、远程仓库,私服搭建。(配置私服)

一、定义

1.1 什么是maven

绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可发布的构件的工具。
一个更正式的 Apache Maven1 的定义:Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

1.2与Ant区别

Ant:

a. Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码,哪里放置输出。随着时间的推移,非正式的约定出现了,但是它们还没有在产品中模式化。
b. Ant 是程序化的,你必须明确的告诉 Ant 做什么,什么时候做。你必须告诉它去编译,然后复制,然后压缩。
c. Ant 没有生命周期,你必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。

Maven:

a. Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里。它把字节码放到 target/classes ,然后在 target 生成一个 JAR 文件。
b. Maven 是声明式的。你需要做的只是创建一个 pom.xml 文件然后将源代码放到默认的目录。Maven 会帮你处理其它的事情。
c. Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。

1.3深入理解

Maven通常被认为是一个构建工具,与Ant类似。不过,Maven的创建者们可不这么认为,在Maven的哲学里,Maven是通过采用各种模式来创建的一个具有可视性、复用性、可维护性和完整性等特征的基础设施。

这么说有点太高大上了,接地气一点来说吧:Maven希望把软件开发中的一些最佳实践和模式都整合和固化下来,这样使用Maven来进行开发时,开发过程更爽,生产出来的软件更棒,具有以上所罗列的各种特性。

这几种特性对于一个团队一起高效的开发协作的确是非常重要的。Maven最初的诞生就是希望Apache的一些项目能够以相同的方式来开发和构建,这样一个开发者从一个项目转到另外一个项目工作的时候能够更加轻松地切换。因为项目的开发、测试、文档生成、报表和部署,都具有一些共同的特征,这些特征就可以认为是软件开发过程中的一些最佳实践,当这些最佳实践成为共识,开发的协作必然会更加高效。

那么Maven要做的就是把这些最佳实践固化成一个通用的项目管理方法。尽管对于不同的项目,开发中各个阶段会有所不同,但是确实可以找到一条普遍适用的路径,Maven将这条路径以非常清晰的方式结合各种实践模式提供给开发者。

至于模式,学术上一般简单定义为针对一种类型的特性问题的解决方案。小到一个项目的目录模式(比如:代码放到哪?测试代码放到哪?资源放到哪?),再大粒度一些比如项目的依赖如何管理,再大到整个项目构建的生命周期模式(比如:通用的构建过程包含哪些阶段?),都是Maven这个基础设施要提供给大家的,是Maven强制大家形成共同的认知。这样大家就能更快速地生产出棒棒哒的软件。

以上,便是Maven的哲学,学习过软件工程的人可能会比较有感觉。

参看自知乎网友:https://www.zhihu.com/question/20104186/answer/87286506

二、仓库

2.1什么是仓库

Maven中的仓库用来存放生成的构建和各种依赖。包含两种仓库:本地仓库和远程仓库。

本地仓库指本机的一份拷贝,用来缓存远程下载、包含你尚未发布的临时构件。 

远程仓库指通过各种协议如file://和http://访问的其它类型的仓库。maven私服也属于远程仓库。

本地和远程仓库有着相同的结构,所以脚本可以很容易地在两边运行,或同步仓库供离线使用。

搭建私服:
nexus-2.11.1-01-bundle
运行console-nexus.bat
然后在浏览器中输入http://localhost:8081/nexus/
用户名:admin
密码:admin123

本地仓库默认地址:C:\Users\Administrator\.m2

正常情况下:C:\Users\Administrator\.m2 目录下是没有settings.xml

解决方案:
1.    去maven解压目录下找conf 找到settings.xml复制到 C:\Users\Administrator\.m2目录下。

<localRepository>/path/to/local/repo</localRepository> 设置本地仓库地址<localRepository>F:\Repository\repository-spring</localRepository>

2.2深入理解

Java最大的一个优势之一应该是整个生态中无数的框架和API,我们创建实际的项目不可避免的都需要用到这些框架和API,而它们通常都是以JAR包的形式提供。 相信很多人都经历过JAR Hell的问题吧,事实上让一个项目所依赖的依赖的外部jar包保持正确的版本和最新的状态,是意见非常苦逼的事情。我们编译项目的时候,需要在classpath上存放依赖的jar包(不管直接使用Eclipse还是手动维护Ant)。而且这些外部的jar包还会有其他依赖。你一定经历过递归地一个个去下载所有这些外部依赖,并且要确保下载的版本都是正确的,当项目越来越复杂的时候,这是意见极其麻烦的事情。

Maven现在来拯救我们了,Maven可以自动帮我们做依赖管理,我们需要做的就是在pom文件里指定依赖jar包的名称、版本号,Maven会自动下载,递归地去下载依赖的进一步依赖这件事情我们也不需要管了。

参看自知乎网友:https://www.zhihu.com/question/20104186/answer/87286506

三、构建项目

3.1本地安装

1、安装(解压即可),配置环境变量,依赖jdk7及以上。

2、现在一般通过idea进行开发,本地不安装maven也行好像。。。idea自己好像集成了maven了。

3.2、构建项目

一个简单的小示例,用来说明maven构建项目的作用。

a. 通过命令创建maven项目

ps:旧版本的maven是通过”mvn archetype:create”命令,来创建项目。

1. 先在指定的盘符下建立对应的空文件夹

F:/ helloworld文件夹

命令:

mvn archetype:generate -DgroupId=com.bjsxt -DartifactId=helloworld -DpackageName=com.bjsxt

maven详解(一)

archetype:generate表示创建一个maven项目,早期版本的maven使用archetype:create

-DgroupId、-DartifactId是maven的常用坐标。用于标识maven项目的唯一性。常用的maven坐标还有:version、scope等。

-DpackageName:是用于指定java程序的包名。

b.编译、打包

切换至helloworld目录 其实就是切换到项目目录下。

maven详解(一)

 

 mvn package命令会自动的将程序进行编译并打包。

maven详解(一)

 

 c.运行

maven详解(一)

 

 实际开发过程中,不会使用命令来创建maven项目。

d.Maven项目可以导入eclipse中

maven详解(一)

pom.xml 是maven项目的核心配置文件

Maven项目最主要的点:只有两个,一个是src源文件,另一个就是pom.xml。

Pom.xml是核心!

3.2 深入理解

Maven这个基础设施落地下来,最重要的还是一个构建工具(虽然Maven创建者们不屑和Ant这样的构建工具相提并论)。所以介绍Maven,必然还是需要先了解构建。

构建是什么呢?简单地说,构建就是软件项目生产的整个过程,比如这个过程应该包括:

  • 文档和代码的生成(有些项目会使用代码自动生成工具,比如数据库访问代码的逆向工程)
  • 代码的编译、测试和打包
  • 打包好的代码进行分发或者部署

大家看看,项目的构建可绝不仅仅是编译软件这件事情。除了写代码,在项目层面做的大部分工作,都包含在构建的过程中。有了Maven,构建中的这些过程都能够进行良好的定义(模式、固化、共识,记住这些关键词哪),而且Maven能够帮我们串起来形成一个自动构建过程,这样比我们手动执行要高效得多。

链接:https://www.zhihu.com/question/20104186/answer/87286506

四、配置文件说明

4.1、pom.xml文件

4.2、setting.xml文件

4.3万能setting.xml文件

4.4万能pom.xml文件

maven详解(一)

上一篇:CompletableFuture异步编排


下一篇:e.pageX,e.offsetX,e.clientX的区别