Maven

Maven

1.maven能解决啥问题?

1.1第三方jar包

在今天的 JavaEE 开发领域,有大量的第三方框架和工具可以供我们使用。要使用这些 jar 包最简单 的方法就是复制粘贴到 WEB-INF/lib 目录下。但是这会导致每次创建一个新的工程就需要将 jar 包重复制到 lib 目录下,从而造成工作区中存在大量重复的文件,让我们的工程显得很臃肿。 而使用 Maven 后每个 jar 包本身只在本地仓库中保存一份,需要 jar 包的工程只需要以坐标的方式 简单的引用一下就可以了。不仅极大的节约了存储空间,让项目更轻巧,更避免了重复文件太多而造成 的混乱。

1.2jar包之间的依赖

jar 包往往不是孤立存在的,很多 jar 包都需要在其他 jar 包的支持下才能够正常工作,我们称之为 jar 包之间的依赖关系。最典型的例子是:commons-fileupload-1.3.jar 依赖于 commons-io-2.0.1.jar,如果 没有 IO 包,FileUpload 包就不能正常工作。 那么问题来了,你知道你所使用的所有 jar 包的依赖关系吗?当你拿到一个新的从未使用过的 jar 包,你如何得知他需要哪些 jar 包的支持呢?如果不了解这个情况,导入的 jar 包不够,那么现有的程 序将不能正常工作。再进一步,当你的项目中需要用到上百个 jar 包时,你还会人为的,手工的逐一确 认它们依赖的其他 jar 包吗?这简直是不可想象的。 而引入 Maven 后,Maven 就可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来, 无需人工参与,节约了我们大量的时间和精力。用实际例子来说明就是:通过 Maven 导入 commons-fileupload-1.3.jar 后,commons-io-2.0.1.jar 会被自动导入,程序员不必了解这个依赖关系。

1.3获取第三方 jar 包

JavaEE 开发中需要使用到的 jar 包种类繁多,几乎每个 jar 包在其本身的官网上的获取方式都不尽相 同。为了查找一个 jar 包找遍互联网,身心俱疲,没有经历过的人或许体会不到这种折磨。不仅如此, 费劲心血找的 jar 包里有的时候并没有你需要的那个类,又或者又同名的类没有你要的方法——以不规 范的方式获取的 jar 包也往往是不规范的。 使用 Maven 我们可以享受到一个完全统一规范的 jar 包管理体系。你只需要在你的项目中以坐标的 方式依赖一个 jar 包,Maven 就会自动从中央仓库进行下载,并同时下载这个 jar 包所依赖的其他 jar 包

1.4将项目拆分成多个工程模块

随着 JavaEE 项目的规模越来越庞大,开发团队的规模也与日俱增。一个项目上千人的团队持续开 发很多年对于 JavaEE 项目来说再正常不过。那么我们想象一下:几百上千的人开发的项目是同一个 Web 工程。那么架构师、项目经理该如何划分项目的模块、如何分工呢?这么大的项目已经不可能通过 package 结构来划分模块,必须将项目拆分成多个工程协同开发。多个模块工程中有的是 Java 工程,有 的是 Web 工程。 那么工程拆分后又如何进行互相调用和访问呢?这就需要用到 Maven 的依赖管理机制。
在这里插入图片描述
上层模块依赖下层模块,所以下层模块中定义的api都可以为上层调用和访问。

2.什么是maven呢?

官方话:Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理。

2.1什么是构建?

构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。
构建过程的几个主要环节:
①清理:删除以前的编译结果,为重新编译做好准备。
②编译:将 Java 源程序编译为字节码文件。
③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告:在每一次测试后以标准的格式记录和展示测试结果。
⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应 war 包。
⑥安装:在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
⑦部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。

2.2为啥使用maven呢?

这是阳光明媚的一天。小白向往常一样早早的来到了公司,冲好一杯咖啡,进入了自己的邮箱——很 不幸,测试小组发来了一封邮件,报告了他昨天提交的模块的测试结果——有 BUG。“好吧,反正也不是第一 次”,小白摇摇头,进入IDE,运行自己的程序,编译、打包、部署到服务器上,然后按照邮件中的操作 路径进行测试。“嗯,没错,这个地方确实有问题”,小白说道。于是小白开始尝试修复这个 BUG,当他 差不多有眉目的时候已经到了午饭时间。
下午继续工作。BUG 很快被修正了,接着小白对模块重新进行了编译、打包、部署,测试之后确认没 有问题了,回复了 测试 小组的邮件。
一天就这样过去了,明媚的阳光化作了美丽的晚霞,小白却觉得生活并不像晚霞那样美好啊。
我们发现,小白一天的工作一大部分时间都花在了编译,打包,部署,测试这些程式化的工作上了,而真正需要“人”的智慧实现分析问题和编码却只占据了很少一部分
能否讲这些程式化的工作交给机器自动完成呢?当然可以!
交给maven自动化构建
此时maven的意义就体现出来了,它可以自动的从构建过程的起点一直执行到终点
清理–>编译–>测试–>报告–>打包–>部署

3.依赖/SDK/组件在maven中是如何管理的?

说这个问题之前,引入一个坐标的概念

3.1坐标

几何中的坐标

[1]在一个平面中使用 x、y 两个向量可以唯一的确定平面中的一个点。
[2]在空间中使用 x、y、z 三个向量可以唯一的确定空间中的一个点。

Maven 的坐标

使用如下三个向量在 Maven 的仓库中确定一个 Maven 工程。
[1]groupid:定义了项目属于哪个组,举个例子,如果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp.
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本

<groupId>com.mqf.maven</groupId> 

<artifactId>Hello</artifactId>

<version>0.0.1-SNAPSHOT</version>

注:SNAPSHOT是快照的意思,代表版本不稳定、尚处于开发中的版本;如果设为Release版本则代表稳定的版本

如何通过坐标在仓库中查找 jar 包?

[1]将 gav 三个向量连起来
com.mqf.maven+Hello+0.0.1-SNAPSHOT

[2]以连起来的字符串作为目录结构到仓库中查找
com/mqf/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar

回到刚才的问题

3.2依赖管理

Maven通过标签来管理项目的依赖。每个依赖项都用一个标签来定义,通常包括以下几个基本元素:

groupId:组织或公司域名的反向表示,通常与项目的包名一致。
artifactId:项目或库的名称。
version:依赖的版本号。
scope:依赖的作用范围,如compile(默认)、test、provided、runtime等。
示例:添加JUnit作为测试依赖:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
    <!-- 添加更多依赖 -->
</dependencies>

3.3SDK管理

本地sdk

mvn install:install-file -Dfile=path/to/my-sdk.jar -DgroupId=com.example -DartifactId=my-sdk -Dversion=1.0.0 -Dpackaging=jar

一旦SDK被安装到本地Maven仓库,你可以在POM文件中添加依赖:

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-sdk</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

引入远程仓库的SDK

<repositories>
    <repository>
        <id>my-company-repo</id>
        <url>http://repo.mycompany.com/maven2</url>
    </repository>
</repositories>

一旦远程仓库配置完成,你可以在POM文件中添加依赖:

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-sdk</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

3.4组件管理

在Maven中,组件通常是指项目中的模块或插件。Maven通过插件和多模块项目(Multi-Module Project)来管理这些组件。
比如你的B模块是个你自己开发的公共组件CommonUtils,你想在A模块使用B模块的功能
你可以在A模块的pom.xml文件引入

<dependency>
        <groupId>包名字</groupId>
        <artifactId>B</artifactId>
        <version>4.13.2</version>
</dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值