Maven从入门到放弃....(settings.xml、私服搭建、自定义模板等)

1. 倘若没有Maven?

如果没有maven项目,当我们在开发不同项目的时候,都需要手动导入一些基本的、重复的JAR包,有的时候还需要考虑到版本是否正确;再比如,我们使用Spring做基本开发的时候,不使用maven项目的话,我们首先思考需要那些JAR,然后将其找到并拷入我们的项目中,最后还要将这些JAR备份到硬盘中,防止开发其他项目的时候还需要查找。

说到这里,相信大家应该可以知道我们使用Maven来做什么了,没错,我们使用Maven主要用来做Jar包管理。

2. Maven介绍

Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。

Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。

2.1 功能

Maven 能够帮助开发者完成以下工作:

  • 构建
  • 文档生成
  • 报告
  • 依赖
  • SCMs
  • 发布
  • 分发
  • 邮件列表

2.2 约定配置

Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。如下所示:

目录目的
${basedir}存放pom.xml和所有的子目录
${basedir}/src/main/java项目的java源代码
${basedir}/src/main/resources项目的资源,比如说property文件,springmvc.xml
${basedir}/src/test/java项目的测试类,比如说Junit代码
${basedir}/src/test/resources测试用的资源
${basedir}/src/main/webapp/WEB-INFweb应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面
${basedir}/target打包输出目录
${basedir}/target/classes编译输出目录
${basedir}/target/test-classes测试编译输出目录
Test.javaMaven只会自动运行符合该命名规则的测试类
~/.m2/repositoryMaven默认的本地仓库目录位置

2.3 特点

  • 项目设置遵循统一的规则。
  • 任意工程中共享。
  • 依赖管理包括自动更新。
  • 一个庞大且不断增长的库。
  • 可扩展,能够轻松编写 Java 或脚本语言的插件。
  • 只需很少或不需要额外配置即可即时访问新功能。
  • 基于模型的构建 − Maven能够将任意数量的项目构建到预定义的输出类型中,如 JAR,WAR 或基于项目元数据的分发,而不需要在大多数情况下执行任何脚本。
  • 项目信息的一致性站点 − 使用与构建过程相同的元数据,Maven 能够生成一个网站或PDF,包括您要添加的任何文档,并添加到关于项目开发状态的标准报告中。
  • 发布管理和发布单独的输出 − Maven 将不需要额外的配置,就可以与源代码管理系统(如 Subversion 或 Git)集成,并可以基于某个标签管理项目的发布。它也可以将其发布到分发位置供其他项目使用。Maven 能够发布单独的输出,如 JAR,包含其他依赖和文档的归档,或者作为源代码发布。
  • 向后兼容性 − 您可以很轻松的从旧版本 Maven 的多个模块移植到 Maven 3 中。
  • 子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号,
  • 并行构建 − 编译的速度能普遍提高20 - 50 %。
  • 更好的错误报告 − Maven 改进了错误报告,它为您提供了 Maven wiki 页面的链接,您可以点击链接查看错误的完整描述。

3. Maven初体验

正常使用Maven有两种形式:

  • 命令行形式(手动创建Maven项目)
  • 集成开发工具创建Maven项目

在这里我们直接使用集成开发工具创建即可。(手动创建项目在下文会阐述。)

3.1 项目创建

我们使用IDEA创建Maven工程,为什么需要Maven工程呢?因为只有我们创建了Maven工程,Maven才能帮助我们管理Jar包以及我们的项目。

这里我们直接选择Maven的脚手架创建项目:

image-20220216220712255

image-20220216221232948

然后next下一步选择maven配置文件以及依赖下载的路径。

image-20220216225005362

最后finish即可创建完成。

image-20220216222150279

3.2 初体验

按照上述步骤创建完成之后,我们编写代码进行测试。由于我们是使用的脚手架创建的,这里没有src目录,需要我们自行创建一下。(输入src一般情况下会自动提示)

image-20220216222402027

目录创建完成之后,可以自行编写一段JDBC的相关代码。(随便找个案例即可)

我们编写JDBC代码后,可以看到当前项目中没有相关Jar,导致代码报错。所以我们需要引入相关Jar,我一般会通过两种方法添加。

image-20220216222606660

3.2.1 Maven仓库

我们可以到中央仓库找相应的Jar:Maven中央仓库

image-20220216223035175

然后搜索MySQL,选择对应的版本号即可。

image-20220216223154374

选择我们需要的版本后,将对应的依赖复制进pom文件即可,同时记得刷新一下,导入相关依赖。

image-20220216223253885

image-20220216223343576

刷新成功后,我们可以发现项目中多出一个mysql驱动包。

image-20220216223936838

这就是Maven中的Jar包管理,不需要我们到处找Jar包,它帮助我们统一管理了。

3.2.2 集成开发工具提示

除了自己去中央仓库查找外,我们还可以通过集成开发工具的提示快速导入。

如图所示,点击Add Maven dependency,然后寻找我们需要的依赖导入即可。

image-20220216224336002

image-20220216224416977

选择对应依赖后,会自动加入到pom文件中。

image-20220216224553037

4. Maven下载与安装

Maven 官网

我们直接进入Maven官网下载,直接下载官网推荐的版本即可。

image-20220219210152608

选择自己需要的版本:windows或者Linux。

image-20220219211019740

下载完成之后,我们该如何安装呢?官网也是有具体步骤的。

image-20220219211238966

  • 首先需要确保我们的Java环境,我们去环境变量中查看有无JAVA_HOME变量。

    image-20220219211434898

  • 解压我们的压缩包到任意目录中

  • 解压完之后将maven的bin目录路径添加到环境变量中的path路径中

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R1MVJU5p-1645337177363)(https://gitee.com/cl1429745331/typora_imgs/raw/master/imgs/image-20220219211905442.png)]

  • 命令行中输入mvn -v查看是否配置完成

    image-20220219211940852

5. Maven项目目录结构

项目目录结构实际上指的是maven要求你的项目必须具有的一个目录层次。

这就是我们常说的约定由于配置

我们想要使用maven进行jar包的管理以及项目的构建和管理,我们就必须遵循maven的规定/约定。

所以我们需要按照如下的目录结构来创建我们的项目。

image-20220219213938651

6. 手动创建Maven项目

上文我们了解了Maven的目录结构,那么我们现在就按照整体结构手动创建一下Maven项目。

  • 首先创建一个工程文件夹 比如DemoMaven

  • 在工程文件夹下创建src文件夹以及pom.xml文件

    image-20220219214824124

  • 在src文件夹中创建main以及test文件夹

  • 再分别到main以及test文件夹下创建Java以及resource文件夹

  • 注意这个时候,我们是不需要手动创建target目录。

大致目录创建完成之后,我们来做一个小需求:如何在控制台输出hello world呢?

按照以往我们肯定都是写一个Java文件,在main方法中输入语句。然后在命令行中通过javac进行编译,然后执行相关文件将语句输出。那我们如何通过maven项目实现呢?

我们首先在main目录下的Java目录下创建好相关Java文件。比如我们创建一个Student类:

image-20220219220357215

image-20220219220315481

创建完之后我们进行如下步骤:

  • 使用命令行进入到maven的工程中

  • 使用mvn compile 命令进行项目的编译

    这个时候相信大家都会运行失败哈哈哈

    image-20220219221102617

    因为我们可以发现还没有对最外层的pom.xml进行操作,作为maven项目的唯一标识,他不可能啥都不干是吧?所以我们需要添加点内容。这边只需要添加不需要理解,后面会专门讲述的。

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- pom的模板文件,包含内容节点的定义 -->
    <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>
      <!– The Basics >
      <groupId>com.demo</groupId>
      <artifactId>DemoMaven</artifactId>
      <version>1.0</version>
      <packaging>war</packaging>
    </project>
    

    内容添加好后我们在重新进行编译:

    image-20220219221645287

  • 编译完成之后,我们可以发现自动生成了target目录,同时里面还有class文件。

    image-20220219221826554

  • 既然class文件生成好了,我们是不是可以直接通过java命令来执行呢?不要急,maven会有他自己运行的方式,我们先将疑问留在这里,在后文阐述。

7. Maven配置文件之settings.xml文件

在maven的解压目录下我们可以发现conf目录有一个settings.xml文件,该文件是maven的全局配置文件,可以说相当重要,所以我们需要对他有个清楚的认识。

打开该文件,我们可以发现里面有很多标签,每个标签下都有对应的解释,看不明白也没事,咱们挑几个常用的说明一下:

  • mirrors 标签

    表示配置镜像所在路径

    image-20220219222902401

    以前手动下载jar包,我们都是从别人哪里拷贝或者网上下载,使用maven对jar包进行管理后,他会自动下载,那么他是从哪里下载的呢?没错,他就是通过该标签进行配置。

    他的默认地址是国外的地址,有的时候为了加快下载速度,我们可以将地址换位国内阿里镜像地址。

    只需要将以下内容复制进行mirrors标签对中即可。

    <mirror>
    	<id>alimaven</id>
    	<mirrorOf>central</mirrorOf>
    	<name>aliyun maven</name>
    	<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>
    
  • localRepository

    maven下载之后的jar包到底保存在哪里呢?这就是maven仓库的概念,会在下文单独阐述。

    如果我们想修改jar包保存的目录就可以通过修改该标签来实现。

    image-20220219223603250

  • interactiveMode 标识maven是否需要和用户交互以获得输入

    如果maven需要和外部用户交互则设置成true否则为false。

    image-20220219223836692

  • offline

    当执行编译操作的时候,是否能自动连接互联网。

    image-20220219223952333

  • pluginGroups

    当插件的组织id(group id)没有显示提供时,供搜寻插件组织id的列表。

    image-20220219224110715

  • servers

    仓库的下载和部署实在pom.xml文件中进行定义的。

    比如说用户名、密码需要访问远程仓库的时候,有时候需要安全认证,这个认证就可以配置在servers标签中。

    image-20220219224245280

  • profiles

    根据环境参数来调整构建配置的列表

8. Maven仓库

Maven把jar包自动下载之后,这个保存jar包的目录由我们自己指定,我们也可以指定这个目录存储的位置,当然他也有一个默认的位置。

image-20220219230026122

image-20220219230047006

补充:在maven构建项目的时候,他会帮助我们把项目中所需要的一些基础的jar包下载下来,这个下载的地址就是由settings.xml文件里面的mirror标签所指定的。

还需要注意的是:如果一个jar包已经在本地仓库中有了,项目中的jar包和仓库中的jar包的版本必须一致才不需要重新下载,否则会下载对应版本的jar包。

了解到上面这些信息后,我们应该可以了解到他的优势了。没错就是节约本地的一个存储空间,不需要每个项目中都有一份jar包了。

9. Maven配置文件之pom.xml

pom全称为project object model(项目对象模型),他是我们maven项目中的唯一标识。

  • 三个必填字段

    pom文件由groupId、artifactId、version组成一个唯一标识。

    groupId:公司的域名、组织等

    artifactId:项目名称

    version:版本号

  • pom里面还会有dependencies标签:这个标签就是用来配置我们项目中具体需要那些jar包。

  • properties标签:用来定义pom中的一些属性值。

  • build标签:指定如何构建当前项目

    • source:指定了当前构建的source目录
    • plugin:指定了构建项目时使用的插件
  • package标签:指定当前构建项目的类型:war、jar、pom

补充:pom文件是可以继承的。

10. Maven依赖

dependencies标签:该标签下面可以包含多个dependence标签。

maven项目如果想要下载指定的jar包,实际上就是在pom.xml文件中的dependencies标签对中进行配置。那具体的dependence写呢?我们只需要前往中央仓库中查询我们需要的依赖将其复制过来即可。

中央仓库

image-20220220102104265

在dependencies下添加相关依赖后,重新编译项目即可发现会自动将相关依赖下载到Maven本地仓库中,同时如果该Jar依赖与其他Jar,也会将依赖的jar包自动下载。(如果是集成工具引入依赖,只需要刷新即可自动导入)

11. Maven插件

image-20220220104617737

Maven本质上是一个依靠插件执行的框架,所有的工作都由插件完成。它分为编译以及报告型的插件。

  • 构建插件将在构建期间执行,它们应该配置在<build/> 元素中。
  • 报告插件将在站点生成期间执行,它们应配置在<reporting/>元素中。因为报告插件的结果是生成网站的一部分,所以报告插件应该是国际化和本地化的。

具体的插件描述我们都可以至官网查看。

image-20220220110036122

那么我们该如何配置这些插件呢?我们举两个简单例子:

image-20220220110220992

12. Maven之archetype

Archetype 是 Maven 项目的模板工具包,它定义了 Maven 项目的基本架构。Archetype 为开发人员提供了数千种创建 Maven 项目的模板,Maven 通过这些模板可以帮助用户快速的生成项目的目录结构以及 POM 文件。

Maven Archetype 由下面 5 个模块组成:

  • maven-archetype-plugin:Archetype 插件。
  • archetype-packaging:用于描述 Archetype 的生命周期与构建项目软件包。
  • archetype-models:用于描述类与引用。
  • archetype-common:核心类。
  • archetype-testing:用于测试 Maven Archetype 的内部组件。

虽然官方给我们提供了很多模板,但是可能不太符合个人定制化的需要,所以为了满足自己的需求,我们可以自定义archetype。具体流程如下:(使用的是我们上文手动创建的maven项目)

  • 在pom.xml文件添加相关插件

    <build>
    	<plugins>
    		<plugin>
    			<groupId>org.apache.maven.plugins</groupId>
    			<artifactId>maven-archetype-pulgin</artifactId>
    			<version>2.2</version>
    		</plugin>
    	</plugins>
      </build>
    
  • 命令行进入由pom.xml文件的根目录

    image-20220220120735727

  • 执行 mvn archetype:generate命令

  • 在target目录下会生成一个自定义的archetype

  • 如果想使用的话,需要通过mvn install本地安装

13. Maven搭建私服

如果没有私服,我们所需的所有构件都需要通过 Maven 的中央仓库或者第三方的 Maven 仓库下载到本地,而一个团队中的所有人都重复的从 Maven 仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程。

另外,很多情况下项目的开发都是在内网进行的,可能根本连接不了 Maven 的中央仓库和第三方的 Maven 仓库。

我们开发的公共构件如果需要提供给其它项目使用,也需要搭建私服。

Maven 私服的概念就是在本地架设一个 Maven 仓库服务器,在代理远程仓库的同时维护本地仓库。当我们需要下载一些构件(artifact)时,如果本地仓库没有,再去私服下载,私服没有,再去中央仓库下载。这样做会有如下一些优点:

  • 减少网络带宽流量
  • 加速 Maven 构建
  • 部署第三方构件
  • 提高稳定性、增强控制
  • 降低中央仓库的负载

image-20220220125225728

13.1 Nexus 下载安装

Nexus 是用来搭建 Maven 私服的,可以说是最好的免费工具了,它的官网上是这样说的:“世界上第一个也是唯一的免费使用的仓库解决方案”。目前的最新版本是 OSS 3.x。提供了针对 Windows、Unix、OS X 三种系统的版本。

官网下载太慢了,大家直接网盘下载就可以了。

链接:https://pan.baidu.com/s/14Ban-NfjLhk2Du8ElCoOgA
提取码:ns2z

前提:已经配置JDK环境变量

  1. 把压缩包解压到任意非中文目录中

  2. 根据自己的系统选择对应的版本
    D:\nexus\soft\nexus-2.12.0-01\bin\jsw

  3. 运行install-nexus.bat 在系统中注册服务(或者直接运行console-nexus即可)

  4. 注册后可以通过start-nexus.bat/stop-nexus.bat 开启服务和关闭服务
    也可以在系统服务中开启关闭服务

    4.1 uninstall-nexus.bat 表示卸载服务

  5. 在浏览器输入 http://localhost:8081/nexus 进入主界面

  6. 在主界面右上角log in 进行登录,默认用户名和密码是
    用户名:admin
    密码:admin123

image-20220220133341771

管理员登录后,可以在设置页面管理角色、用户等其他一系列的操作。例如创建一个角色,给角色设置某一仓库的管理权限,然后向这个角色中添加人员。具体操作不做过多介绍,一看就明白。

管理员还可以管理仓库,不过一般来说,默认的那几个仓库就可以了。默认有如下几个仓库:

image-20220220133750324

proxy:这是代理方式,它是用来代理中央仓库的,例如我们依赖的包在本地仓库没有,就会到私服获取,私服没有的话,会到中央仓库先把包下载到这里,然后再下载到本地仓库;

hosted:指的是我们公司或团队内部的包,并且 hosted 类型的仓库会分为 releases 和 snapshots 两个,前者是正式版,后者一般是开发测试版;

group:它的目的就是把多个仓库组合起来,然后我们项目中只需要配置上这个类型的仓库地址,就可以把它里面组合的几个仓库都关联上。

我们也可以自己创建仓库:

image-20220220133903144

创建仓库主要是配置以下我们的远程地址,从上文我们了解到如果私服没有相关JAR包需要去远程仓库获取,所以这边我们需要配置远程仓库的地址。

image-20220220134222601

13.2 本地仓库配置

私服搭建完成后,我们只需要在全局配置文件中将mirror标签的地址指向我们的私服即可。

image-20220220134533085

image-20220220134810589

大家可以随意选择一个地址进行测试,但是需要去设置允许私服去远程仓库下载。

image-20220220140405656

13.3 测试

以上两步配置完成后,我们使用之前手动创建的Maven项目执行编译操作,查看效果。

image-20220220140134055

image-20220220140154740

由上图可知,我们的私服搭建完成。我们的项目首先会查看本地仓库,如果没有相关Jar则去私服查询,如果私服没有则去远程仓库下载。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

、楽.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值