Apache Maven

Maven是一个项目管理和构建自动化的工具。对于程序员来说,最关心的是他的项目构建功能。如果说Spring是必须要学习的框架,那么Maven就是Java必须要掌握的工具。

Maven提供了一个命令行工具可以把工程打包成Java支持的格式(比如jar),并且支持部署到中央仓库里,这样使用者只需要通过工具就可以很快捷的运用其他人写的代码,只需要添加依赖即可。

Maven系统架构:
在这里插入图片描述
从这个架构里可以看到,借助于中央仓库可以实现代码共享,对于团队协作至关重要。

Maven使用惯例优于配置的原则。它要求在没有定制之前,所有的项目都有如下的结构(其实Java工程目录都是遵循了这个结构规范) :

目录目的
${basedir}存放pom.xml以及所有子目录
${basedir}/pom.xmlMaven项目的配置文件
${basedir}/src/main/java项目java源代码
${basedir}/src/main/resources项目的资源,比如property文件
${basedir}/src/test/java项目的测试类
${basedir}/src/test/recources测试类使用的资源

${basedir}是Java工程的根路径,一个Maven项目编译后会产生一个jar(java的一种压缩格式),存放在 ${basedir}/target,编译后的classes存放在 ${basedir}/target/classes。

1、Maven命令

想要使用Maven这个工具,是要在命令行(终端软件)里输入指令的方式来执行的,注意命令要在工程的根目录下执行

  1. mvn clean compile
    编译命令,Maven 会自动扫描src/main/java下的代码并完成编译工作,执行完,会在根目录下生成target/classes目录(存放所有的class)。
  2. mvn clean package
    在compile的基础上,把所有java文件和资源打包成一个jar
  3. mvn clean install
    在compile和package的基础上,把jar包安装到本地Maven仓库目录里,这个目录是 ${user_home}/.m2。
    ${user_home}是当前电脑登录用户的目录 。
  4. mvn compile exec:java -Dexec.mainClass=${main}
    compile + 执行,具体执行入口就是 ${main} (从java文件夹下的第一个包开始)。

在这里插入图片描述
这五个核心概念都会运用在Maven配置文件中,Maven配置文件是一个强约定的XML格式文件,它的文件名一定是pom.xml

2、POM(Project Object Model)

在这里插入图片描述

  1. maven坐标
  2. maven工程属性
  3. maven依赖
  4. maven插件

2.1、Maven坐标

<groupId>com.youkeda.course</groupId>
<artifactId>app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>

这四个标签组成了Maven的坐标,所谓坐标就是一种位置信息,Maven的坐标决定了这个Maven工程部署后存在Maven仓库的文件位置,所以这个坐标信息是必须要指定的。

groupId
groupld就像一一个文件夹一样,它的命名和Java的包比较一致,这里一般只用小写的英文字母和字符。比如这里的com.youkeda.course一般来说一个公司会设置自己的groupld,避免和其他公司重合,个人开发者也一样。

artifactId
artifactld有点像文件名一样,在一个groupld内,它应该是唯一的,不能使用 中文或者特殊字符,从规范上来说只能使用小写的英文字母、"."、"-" 、"_"。比如: app、 member .shared这些都可以。

packing
Maven工程执行完后会把整个工程打包成packaging指定的文件格式,默认情况下packaging的值是jar ,所以如果pom.xml文件中没有声明这个标签,那就是jar。还可以是war、ear、pom

version
它基本遵循了软件工程中对版本号的约定。在Maven的世界里,会把一个工程分为两个状态,这也是软件工程里最最常用的规范:

  • SNAPSHOT
    这个单词翻译过来的意思是快照,实际上代表了当前程序还处于不稳定的阶段,随时可以再修改,所以在我们开发的时候我们会在版本号后面加上SNAPSHOT关键字

  • RELEASE
    RELEASE和SNAPSHOT是对立面的,所以它代表的就是稳定,一般我们正式发布的时候,都会把version改为RELEASE。当然你可以不用特意的加上
    RELEASE,因为只要不是SNAPSHOT那就是RELEASE

了解了工程状态之后,我们再来看版本号的约定,在软件工程里,我们一般会用三位数字来表示版本号,所以大概是x.x.x这样的格式,比如说iPhone 11搭配的操作系统的版本是ios 13.1.2 ,正如你所想的这是一个RELEASE版本.

  • 第一位代表主版号
  • 第二位代表新增功能
  • 第三位代表bugfix后的版本

有时候可能只有两位(没有主版号),大家约定好就行,编程过程中约定大于一切

最后还有一个约定,那就是执行mvn clean package 和 install命今生成的jar文件名格式 [artifactId]-[version].jar 比如:app-1.0.0-SNAPSHOT.jar文件

2.2、Maven属性配置

 <properties>
    <java.version>1.8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
  • java.version
  • maven.compiler.source
    指定Maven编译时源代码的JDK版本
  • project.build.sourceEncoding
    指定文件编码格式,一般上utf-8
  • maven.compiler.target
    指定用哪个JDK编译

2.3、dependencies

一旦我们在pom.xml里声明了dependency信息,会先去本地用户目录下的.m2 文件夹内查找对应的文件,如果没有找到,那么就会触发从中央仓库下载行为,下载完会存在本地的.m2文件夹内。
一般把别人写的代码称为第三方库,自己和团队写的称为第二方库。

中央仓库
前面提到过Maven会把所有的jar都存放在中央仓库里,我们可以通https://search.maven.org/这个网站来搜索jar。可惜的是这个网站部署在国外,在国内访问不到,我们可以访问阿里云的镜像服务器
https://maven.aliyun.com/mvn/search

2.4、插件体系 plugins

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值