Maven[项目构建工具]

引言

前面学习使用的servlet、jdbc等技术是最原生态的,代码实现比较繁琐,如果在企业级开发中使用这样的技术,那么工作量就会非常大。

那么怎么来解决这个问题呢?

使用框架,在java后端有许多的框架技术,例如mybatis、spring系列框架,可以大大提高开发效率。

  • 框架其实就是对一些基础的功能进行封装(封装到了jar包中),让程序员可以在此基础上进行快速开发

    • 例如:盖房子——>框架结构(主体、基础功能、水电气网...)——>在此基础上施工

    • 像一些简单的项目做完大约需要用到70个jar包,像商业级项目,使用的组件更多,大约会用到100多个jar包,框架就可以帮助我们管理这些jar包

所以我们接下来学习的主题是:进一步接近企业级开发

1 为什么我们要学习maven?

maven 还未出世的时候,我们有很多痛苦的经历。

痛点 1:jar 包难以寻找

痛点 2:jar 包依赖的问题

痛点 3:jar 不方便管理

痛点 4:项目编译

2 Maven简介

Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,用来帮助开发者管理项目中的 jar包,以及 jar包之间的依赖关系、完成项目的编译、测试、打包和发布等工作。

  • 简单来说就是一款在开发期间,为程序员提供的一款项目管理工具(包含项目中的jar、编译、打包)

2.1 Maven 中的概念

maven官方提供了一个专门存储jar的仓库,不同的开发者,或者框架的官方将这些jar上传到maven官方提供的仓库中,在仓库中,每一个jar都有一个唯一的位置,统一管理这些jar,其他开发者如果需要使用,只需要知道自己使用的jar包在maven仓库中的位置即可。

  • 只需要借助maven,输入jar包地址,maven工具就会自动从maven仓库下载jar

Pom(Project Object Model 项目对象模型)

Maven 管理的项目的根目录下都有一个 pom.xml 文件,pom.xml 文件用来指示Maven 如何工作。

在 pom.xml 文件中配置项目基本信息以及项目构建信息等。

  • 比如:项目坐标、项目依赖的 jar、插件、编译选项等。

一旦在 pom.xml 文件中配置了所依赖的 jar,Maven 会自动从构件仓库中下载相应的构件。

2.2 项目坐标

maven 给每个 jar 定义了唯一的标志,这个在 maven 中叫做项目的坐标,通过这个坐标可以找到我们需要用到的任何版本的 jar 包。

  • 也就是jar包在仓库中的位置

groupId、artifactId、packaging、version 的组合被称为项目的坐标,它们形成了项目的唯一标识,Maven通过坐标来精确定位构件。其中 groupId、artifactId、version 是必须的,且这三项的值必须唯一,packaging 是可选的(默认为 jar)。

2.3 仓库

存放jar包的地方,中央仓库全球共享,先将 jar 从中央仓库下载到本地仓库,然后在项目中引用本地仓库的 jar。

  • 在全球各地还有中央镜像仓库(也可以理解为备份),我们接下来要使用的就是阿里云镜像仓库

  • 本地仓库(在自己的电脑上)

5dfd5f2a0a5a4b758bb78519ed019c6b.png

  • 第一次在项目中要使用jar包,这时候本地仓库是没有的,他就会去中央仓库或中央镜像仓库中去下载(默认是去中央仓库下载,如果我配置的时中央镜像仓库,那就会去中央镜像仓库下载,不管是在哪下载,都会下载到本地仓库),下次在项目中使用的时候,现在本地仓库找,本地仓库如果有,他就不会再去中央仓库或者中央镜像仓库中找,而是直接引用本地仓库中的jar包。

3 Maven 开发环境搭建

使用前提:

  1. 安装 jdk ,maven是依赖于jdk的

  2. 保证网络的通畅,Maven 工作时需要通过网络下载各种插件以完成任务,第一次下载jar包需要从中央仓库或镜像仓库下载

3.1 下载 maven 服务器

maven 官网:Maven – Welcome to Apache Maven

这里我们下载的版本为3.6.0

580a2cec20f144788d5c0a9521acbd85.png

点击 download 进行下载,如下图

d3828def78d34b16ae37358213c2bced.png

3.2 安装,配置maven

1.点击下载二进制的 apache-maven-3.6.0-bin.zip 进行解压,然后在系统环境中配置环境变量,在path中配置到bin目录:

195d4c75eaa04bba93726cb4a58bcac5.png

2.配置成功后输入命令mvn -version查看版本如下图:

在cmd输入命令:mvn -version

b295d985f6ab4275bbbc909ad0442d54.png

查看结果如上图,表示 maven 环境配置成功。

3.配置本地仓库地址

接下来根据情况在本地磁盘中建立通过 maven 下载后 jar 文件所存储的文件夹,一般我们称为”仓库(repository)”;最终是如何将下载的 jar 文件存储到我们指定的仓库中呢?

需要在 maven 的服务器解压的文件中找到 conf 文件夹下的settings.xml 文件进行修改,如下图所示: 

  • 建议先将 settings.xml 文件备份,以免出现错误

60f53205008848d6b848d2b2e9905139.png

①配置本地仓库位置:

  • 这里配置的位置需要在对应目录创建文件夹

fa8d7dde4fa24e2ab7392ca5e930fb67.png

f0fa8a8fc407423fa4145e53103bf8d4.png

②配置阿里云 maven 镜像仓库,下载速度更快

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

如下图所示: 

1c0f455569de4b00b1260936a84b983c.png

3.3 idea 中设置 maven

009eefd408834f789c5b9ebb7aeffbf5.png

683a458eee134e39918baedb2898d68a.png

d9b788db0dbd45119b2255c434930bca.png

b3bd1ed833a545408fc564a7f36a254b.png

66082f05cc724377b8beb7b111fcf172.png

3.4 创建 maven 工程

创建新项目:

25305950021c455d849a8255c04ec66e.png

选择java企业级项目:

c33c38a9bffc41a5b7745a5431ce8c3d.png

选择Web Profile:

ea920d1306184ff082cc4aa8125f28dd.png

设置项目名以及源代码存放位置等:

4cd1472454384ac687c484942f443425.png

因为我们是第一次使用,所以它会自动下载maven的一些插件:

6e9038dae6664751ae6619b9d3a0823b.png

自动下载到我们的本地仓库中:

40209f4d062e4464bc3340392c5e1eee.png

到此我们的一个maven工程就创建成功了。

4 Pom.xml 配置

maven 仓库官网(http://mvnrepository.com/)如下图所示:

在此官网就可以下载自己所需开发 jar 包,继续点击链接打开如下:

在搜索框中输入要下载的jar包:

点击进去后选择需要的版本:

例如我们选择8.0.16这个版本,点击进入:

将坐标粘贴到dependencies中,点击刷新下载:

这个jar包就会从中央仓库下载到我们的本地仓库中:

maven会自动将这个jar包及其依赖的jar包自动下载到我们的项目中,这就叫管理我们项目中的jar以及jar之间的依赖关系:

注意:首次使用一个jar包时,它会从中央仓库下载到我们的本地仓库中,以后在其它项目中如果要用这个jar包,我们只需要在项目中配置jar包的坐标,它就会直接从本地仓库中加载,就不用在中央仓库重新下载了。

例如下载 servlet jar 包

在 Pom.xml 文件配置 jar 包信息,使用 maven 自动下载 jar 包管理 jar 之间的依赖

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

<!--配置 servlet 开发环境 -->

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

各个子元素功能解释:

<groupId>,<artifactId>和<version>:依赖项的基本坐标

<type>:依赖项的 packaging 类型,默认是 jar;

<scope>:依赖项的作用范围,默认是 compile。

  • 各个取值及含义如下:

    • compile:编译时和运行时依赖。如果你的项目最终打包为 war 包,则该依赖包会被拷贝到 war 包中的 lib 目录中。

    • provided:编译项目主代码和测试代码时使用此依赖项,运行时由 jre 或 web容器提供。如果你的项目最终打包为 war 包,则该 jar 包不会被打包。

pom.xml内容介绍:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
​
    <groupId>com.example</groupId><!-- 组id(jar包在仓库的地址) -->
    <artifactId>mavenDemo</artifactId><!-- 构建id(项目名) 相当于一个组件 -->
    <version>1.0.0</version><!-- 版本号 -->
    <name>mavenDemo</name><!-- 项目名字 -->
    <packaging>war</packaging><!-- 打包类型 -->
​
    <!-- 属性设置 -->
    <properties>
        <!-- 编译版本 -->
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <junit.version>5.6.2</junit.version>
    </properties>
​
    <!-- 依赖 -->
    <dependencies>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
​
        <dependency>
            <groupId>commons-fileupload</groupId><!-- jar包的组id -->
            <artifactId>commons-fileupload</artifactId><!-- 构建id(组件名) -->
            <version>1.3.1</version><!-- 版本号 -->
            <type>jar</type><!-- 包类型 默认是jar -->
            <scope>compile</scope><!-- scope 范围 作用域 默认是compile 打包时就会将jar包打包到项目中的lib目录中-->
        </dependency>
​
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope><!-- provided 项目打包时,此jar不会被打包到项目中去,只是本地编译需要 -->
        </dependency>
    </dependencies>
​
    <build>
        <!-- 配置maven插件 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.0</version>
            </plugin>
        </plugins>
    </build>
</project>

5.maven 命令

Maven 常用命令

1. compile 编译

 使用maven命令同样可以:

2. clean 删除 target

使用命令清除:

3. package 打包

打开可以看到有一个lib文件,里面有我们的jar以及jar依赖,没有servlet,因为servlet是provided,只是本地编译需要:

4. install 把项目 install 到本地仓库

这里举个例子:比如说我们专门创建一个项目(可以理解为一个构建/组件),将我们平时写的一些工具类放进去,这时我们如果要在其它项目中使用,就需要在仓库中引用,这时就要使用install命令,将该项目安装到我们的本地仓库中,以便其它项目使用。

 执行命令后可以看到我们的项目被打包安装到了本地仓库中:

这时我们在其它项目中就可以将我们自己制作的本地仓库的组件依赖进去使用了:

<!-- 将组件依赖到项目中 -->
<dependency>
    <groupId>com.example</groupId>
    <artifactId>myUtil</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

测试:可以看到在其它项目中就可以调到我们在内个组件中写的方法了

  • 注意:package和install 的区别:

    • package只是本地进行打包,install会把组件打包安装到我们我们的本地仓库中

5. test 运行测试代码

  • 用来运行测试代码的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chen☆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值