吉森的技术小站 吉森的技术小站
首页
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

吉森

AI时代程序员
首页
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Java基础

    • 就从Java8开始吧(一)lambda表达式详解
    • 就从java8开始吧(二)lambda表达式和方法引用
    • 就从Java8开始吧(三)说一说Stream
    • 就从Java8开始吧(四)唠一唠Optional
    • 提高开发效率的奇技淫巧(一)lombok
    • maven概览
      • 1. 什么是maven?
        • 1.1 maven的设计理念(译自官方文档)
        • 1.2 maven的特性(译自官方文档)
      • 2. maven仓库
        • 2.1 中央仓库
        • 2.2 远程仓库(nexus私服仓库)
        • 2.3 m2本地仓库
        • 2.4 maven获取jar包的过程
      • 3. 如何使用maven
        • 3.1 maven安装和配置环境变量
        • 3.2 settings.xml文件
        • 3.3 pom.xml文件
        • 3.3.1 maven坐标
        • 3.4 maven生命周期和maven命令
        • 3.5 扩展maven
        • 3.5.1 maven插件
    • 就从Java8开始吧(五)新日期和时间API
    • 就从Java8开始吧(六)接口默认方法和静态方法
    • 提高开发效率的奇技(二)Intellij IDEA的进阶应用
    • 深入浅出java web(一):从根说起——servlet
    • 深入浅出java web (二):简述http协议
  • Spring框架

  • Java
  • Java基础
吉森
2018-09-09
目录

maven概览

  • content {:toc}

# 1. 什么是maven?

意第绪语,意为知识的积累。maven主要有两重身份:构建工具、依赖管理工具。同类工具有ant、gradle。

# 1.1 maven的设计理念(译自官方文档)

  • 让构建过程变得简单。隐藏大量具体实现细节,无需了解底层原理。
  • 提供统一化的构建系统
  • 提供质量工程信息
  • 为开发的最佳实践提供指南
  • 允许向新特色透明化地迁移

# 1.2 maven的特性(译自官方文档)

  • 依据最佳实践设计的简单工程设置。
  • 所有工程的统一化使用。新开发者不必花时间来熟悉一个项目结构。
  • 优秀的依赖管理——包括自动升级、依赖闭合(即依赖可传递)
  • 能够轻松地同时作用于多个工程。
  • 大量现成的jar包和元数据的仓库,这些jar包通常为开源工程,可以实时获取其最新的发布版本
  • 可以使用Java或其他脚本语言编写的插件进行轻松扩展
  • 需要少量配置就可以快速使用新特性
  • 执行在maven外依赖管理和部署的Ant任务。
  • 基于模型的构造:maven可以将任意数量的工程构建为预先定义的输出类型,如JAR、WAR或基于工程元数据的发布包,而几乎无需编写脚本。
  • 工程信息的一致性:构建过程使用相同的元数据,maven能够生成一个包含你希望添加的任何文档的网页或PDF,并且加入关于工程开发状态的标准报告。
  • 版本发布管理:不需要太多额外配置,maven可以整合你的版本控制系统(SVN或git)并且基于特定的版本发布工程。它可以将工程发布到一个由其他工程使用的分布式位置。Maven可以将工程发布为jar包或者源代码。
  • 依赖管理:Maven鼓励使用中央库的Jar包和其他依赖包。你的工程客户端可以使用maven内部原理下载你工程所需的任何jar包。它允许maven用户在不同工程间复用jar包并且鼓励工程间的交互,以确保解决向下兼容问题。

# 2. maven仓库

在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。

Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)。仓库分为三级,中央仓库、远程仓库以及本地仓库。

# 2.1 中央仓库

http://repo1.maven.org/maven2

中央仓库存储了世界上大多数开源的maven构件。

除了中央仓库外,还有一些独立的第三方库,如jboss库、primefaces库等。这些仓库拥有一些中央仓库不具有的专属jar包。

# 2.2 远程仓库(nexus私服仓库)

可以使用nexus软件搭建团队私有的远程仓库(即私服仓库)。

私服可以管理二方包(本团队开发的用于别的工程的jar包)、三方包(其他团队开发的jar包),同时也可以连接中央仓库和第三方库,从这些仓库下载私服中不存在的jar包,并储存在服务器中。

# 2.3 m2本地仓库

默认路径:(Administrator和root替换为实际登陆用户名)

windows: C:\Users\Administrator\.m2\repository

linux: root/.m2/repository

可以在settings.xml文件中修改

# 2.4 maven获取jar包的过程

st=>start: 开始
e=>end: 结束
local=>condition: 本地仓库是否有jar包
localImport=>operation: 本地导入
hasRemote=>condition: 是否配置远程仓库
central=>condition: 中央仓库是否有jar包
centralToRemote=>subroutine: 中央仓库下载到远程仓库
remote=>condition: 远程仓库是否有jar包
remoteToLocal=>subroutine: 下载到本地
fail=>end: 获取失败

st->local
local(yes)->localImport->e
local(no)->hasRemote
hasRemote(yes)->remote
remote(yes)->remoteToLocal(left)->localImport
hasRemote(no)->central
remote(no)->central
central(yes)->centralToRemote(left)->remoteToLocal
central(no)->fail
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 3. 如何使用maven

# 3.1 maven安装和配置环境变量

较简单,略

# 3.2 settings.xml文件

maven的全局配置文件

配置localRepository

<localRepository>D:/alibaba/.m2</localRepository>
1

配置server

配置mirror

配置profile

# 3.3 pom.xml文件

项目对象模型,maven针对具体项目的唯一配置文件

# 3.3.1 maven坐标

通过maven坐标可以唯一性地定位到仓库里的jar包。Maven的坐标元素包括groupId、artifactId、version、packaging、classifier。只要我们提供正确的坐标元素,Maven就能找到对应的构件,首先去你的本地仓库查找,没有的话再去远程仓库(私库)下载。如果没有配置远程仓库,会默认从中央仓库地址(http://repo1.maven.org/maven2)下载构件。上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classifier是不能直接定义的,需要结合插件使用。classifier可以包括sources、javadoc等。

# 3.4 maven生命周期和maven命令

清洁(clean)生命周期

  • 清洁(clean) 删除以前构建生成的所有文件

默认(default)生命周期

  • 校验(validate) - 验证项目是否正确,所有必要的信息可用
  • 编译(compile) - 编译项目的源代码
  • 测试(test) - 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署
  • 打包(package) - 采用编译的代码,并以其可分配格式(如JAR)进行打包。
  • 验证(verify) - 对集成测试的结果执行任何检查,以确保满足质量标准
  • 安装(install) - 将软件包安装到本地存储库中,用作本地其他项目的依赖项
  • 部署(deploy) - 在构建环境中完成,将最终的包复制到远程存储库以与其他开发人员和项目共享。

站点(site)生命周期

  • 网站(site) 生成项目的站点文档

注意,maven生命周期中的每个命令执行时,都会调用前面的命令,如在执行安装(install)之前按顺序(验证(validate),编译(compile),打包(package)等)执行每个默认生命周期阶段。在这种情况下,您只需要调用最后一个构建阶段来执行,安装(install)。

mvn install

最常用的命令,用于清理同时打包

mvn clean package

还可以加一些参数,如跳过测试(maven命令的本质是调用java命令,因此通过-Dxxx的形式来添加 执行参数)

mvn clean package -Dmaven.test.skip=true

本地安装第三方jar包 mvn install:install-file -Dfile=lucene-queryparser-4.6.1.jar -DgroupId=org.apache.lucene -DartifactId=lucene-queryparser -Dversion=4.6.1 -Dpackaging=jar

上传第三方jar包

mvn deploy:deploy-file -DgroupId=com.maven.api -DartifactId=maven-api -Dversion=1.0 -Dpackaging=jar -Dfile=本地jar包的地址 -Durl=上传到的私有仓库的地址 -DrepositoryId=nexus

# 3.5 扩展maven

# 3.5.1 maven插件

maven插件是由java或其他脚本语言编写的、用于扩展maven的程序。举几个例子

  • 编译插件 用于实现生命周期中的compile阶段,默认会调用此插件,只有需要配置的时候才需要显式声明这些插件

  • 打包插件 用于实现生命周期中的package阶段,常用的打包插件包括maven-jar-plugin和maven-war-plugin,分别将工程打包成jar包和war包,也是在生命周期中默认调用。一般需要在项目包中排除某些文件时显式声明。

  • mybatis-generator mybatis-generator的插件,用于生成mybatis相关的一些文件(java bean、dao层接口、xml文件等)

  • spring boot spring-boot的插件,可以将spring boot项目打成一个可执行的jar包。

编辑 (opens new window)
#项目管理工具#maven
上次更新: 2024/04/07, 16:35:29
提高开发效率的奇技淫巧(一)lombok
就从Java8开始吧(五)新日期和时间API

← 提高开发效率的奇技淫巧(一)lombok 就从Java8开始吧(五)新日期和时间API→

最近更新
01
深入浅出java web (二):简述http协议
02-12
02
深入浅出java web(一):从根说起——servlet
02-08
03
提高开发效率的奇技(二)Intellij IDEA的进阶应用
10-09
更多文章>
Theme by Vdoing | Copyright © 2024-2024 吉森 | MIT License | 吉ICP备17006653号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式