项目管理工具——Maven的基本使用

落日映苍穹つ 2022-01-31 10:55 478阅读 0赞

文章目录

  • 为什么要用maven
  • maven的安装与配置
  • 仓库
    • 本地仓库
    • 中央仓库
    • 远程仓库
    • 配置Maven阿里云镜像
    • Maven依赖的搜索顺序
  • POM
  • 使用maven构建你的第一个java项目
  • 使用maven构建你的第一个web项目
  • 添加依赖
  • 命令行操作maven项目
  • maven分模块开发

  • 参考文档:https://www.runoob.com/maven/

为什么要用maven

Maven 翻译为”专家”、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。

官方的解释太难懂了,站在开发者的角度通俗点说,maven就是一个项目管理工具,我们可以通过一个pom.xml文件来管理项目所需要的jar包,简单的配置就可以使用我们需要的jar包,不需要手动添加,maven会自动的帮我们管理它们之间的依赖关系

有过手动添加jar包经历的朋友可能体会更深,有时候你需要使用一个jar包,好,你把它手动添加了进来,但是你不知道这个jar包其实还依赖于另外一个jar包,项目肯定运行失败。可是我怎么能知道呢,总不能每加一个jar包都要进去翻原码或者网上查资料吧,又或者jar包版本之间的不匹配也会导致项目运行失败。这都是令人十分厌恶的事情,幸好有了maven,那么这些问题都可以得到完美的解决。

maven的安装与配置

在官网我们就能找到最新版本的maven:http://maven.apache.org/download.cgi

下载安装之后记得要配置环境变量,比如我放在E盘,那就这样配置:

  1. 配置MAVEN_HOME环境变量
    MAVEN_HOME= E:\apache-maven-3.6.1
  2. 配置PATH。
    PATH= ;%MAVEN_HOME%bin
  3. 验证是否安装成功
    打开cmd,输入 mvn -v

这部分不多说,百度一搜一大堆。

仓库

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

Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库

Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。

Maven 仓库有三种类型:

  1. 本地(local)
  2. 中央(central)
  3. 远程(remote)

知道这些概念有利于帮助我们理解mavne到底是怎样管理这些构件的。

本地仓库

本地仓库,就是本地电脑上存储构件的地方,运行maven时,maven会先去本地仓库中找需要的构件,如果找不到,会自动从中央仓库 / 远程仓库中下载下来放到本地仓库,然后再从本地仓库中找到它并使用。

下载maven后,本地仓库并不会自动建立。

在你第一次运行maven时,maven才会在用户目录下帮我们建一个本地仓库,路径是.m2/respository/

如果你不想占用c盘空间或者想找起来方便点,可以修改默认位置,找到你安装maven的目录,在conf 目录中的 settings.xml 文件中定义另一个路径。

比如我把它放在D:\maven_install\apache-maven-3.6.1-bin\mvnrepository这个目录下(和maven放一块,找起来方便):

  1. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  4. <!-- localRepository
  5. | The path to the local repository maven will use to store artifacts.
  6. |
  7. | Default: ${user.home}/.m2/repository
  8. <localRepository>/path/to/local/repo</localRepository>
  9. -->
  10. <!--配置本地仓库位置-->
  11. <localRepository>D:\maven_install\apache-maven-3.6.1-bin\mvnrepository</localRepository>
  12. </settings>

中央仓库

中央仓库是由maven社区提供的maven仓库,包含了几乎所用你能用得上的类库。

使用中央仓库不需要进行配置,maven默认。

当然,使用中央仓库时记得连网。

远程仓库

远程仓库又叫私服,一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率。

启用私服要进行配置,否则不启用。

配置Maven阿里云镜像

Maven的中央仓库在国外,国内下载会非常的慢,更换成阿里云的镜像仓库就可以,分为全局配置和单项目配置(推荐全局配置):

  1. 在config目录下的setting.xml中进行全局配置
    打开setting.xml文件,找到 mirrors 节点上,添加内容如下:

    1. <!--配置maven阿里云镜像-->
    2. <mirror>
    3. <id>nexus-aliyun</id>
    4. <mirrorOf>central</mirrorOf>
    5. <name>Nexus aliyun</name>
    6. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    7. </mirror>
  2. 在pom.xml文件中进行单项目配置
    pom文件中,没有mirror元素。在pom文件中,通过覆盖默认的中央仓库的配置,实现中央仓库地址的变更。



    alimaven
    aliyun maven
    http://maven.aliyun.com/nexus/content/groups/public/


    true



    false


Maven依赖的搜索顺序

当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:

优先级:

本地仓库——-中央仓库——-远程仓库

在这里插入图片描述

POM

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

pom文件是我们操作maven最直观的工具,也就是说,pom相当于我们给maven下达的指令,maven工作时,会先找到pom.xml文件并解析它,然后根据指令去执行任务。

POM 中可以指定以下配置:

  • 项目依赖
  • 插件
  • 执行目标
  • 项目构建 profile
  • 项目版本
  • 项目开发者列表
  • 相关邮件列表信息

一个简单的pom文件:

所有 POM 文件都需要 project 元素和三个必需字段:groupIdartifactIdversion

  1. <!-- progect是项目的根标签 -->
  2. <project>
  3. <!-- 模型版本,直接写4.0.0 -->
  4. <modelVersion>4.0.0</modelVersion>
  5. <!-- 公司或者组织的唯一标志,maven会将项目打成的包按照这个路径放置-->
  6. <groupId>com.xx</groupId>
  7. <!-- 项目的唯一标识,一个groupId下可能有多个项目 -->
  8. <artifactId>myApp</artifactId>
  9. <!-- 项目打包形式,jar/war/其他 -->
  10. <packaging>jar</packaging>
  11. <!-- 版本号 -->
  12. <version>1.0-SNAPSHOT</version>
  13. <!-- 项目名 -->
  14. <name>myApp</name>
  15. </project>

pom.xml是maven中和我们打交道最多的一个玩意,不过,没有必要揪着它不放,因为Maven 的 pom.xml 文件不需要手工编写。Maven 提供了大量的原型插件来创建工程,包括工程结构和 pom.xml。

使用maven构建你的第一个java项目

打开cmd,直接输入命令:

  1. mvn archetype:generate
  2. -DgroupId=com.zyw.helloworld
  3. -DartifactId=my-app
  4. -DarchetypeArtifactId=maven-archetype-quickstart
  5. -DinteractiveMode=false

注意,如果复制这个命令去创建报错的话,最好把它整理一下,在每个命令中中间加上空格。

  • mvn:核心命令
  • archetype:generate :创建项目
  • -DgourpId: 组织名,公司网址的反写 + 项目名称
  • -DartifactId: 项目名-模块名
  • -DarchetypeArtifactId: 指定 ArchetypeId(模型),maven-archetype-quickstart,创建一个简单的 Java 应用
  • -DinteractiveMode: 是否使用交互模式创建项目

解释一下,archetype 也就是原型,是一个 Maven 插件,准确说是一个项目模板,它的任务是根据模板创建一个项目结构。我们使用 quickstart 原型插件创建一个简单的 java 应用程序。

演示一下:

  1. 打开cmd,切换到你想放置项目的盘符或者目录下
  2. 复制上面的命令
  3. 回车

在这里插入图片描述
创建成功后我们来看一下这个目录结构:

在这里插入图片描述
my-app就是我们的项目。src下有两个同级的目录,一个是main,一个是test
main/java/com/zyw/helloworld就是我们存放Java代码的目录,下面的test目录中有与之想对应的文件目录用于测试。

我们还应该手动创建一个/src/main/resource文件,用来放置我们可能用到的配置文件之类的。

使用maven构建你的第一个web项目

和构建java项目类似,打开cmd,切换到你想创建项目的目录下:

  1. mvn archetype:generate
  2. -DgroupId=com.zyw
  3. -DartifactId=myWebApp
  4. -DarchetypeArtifactId=maven-archetype-webapp
  5. -DinteractiveMode=false

也许你已经发现了,这个命令和上面创建java项目的命令好像啊,那么它是怎么区分我们想要创建java项目还是web项目的呢?关键就在于-DarchetypeArtifactId=maven-archetype-webapp这个命令,也就是说,我们使用了专门来创建web的项目模板。

在这里插入图片描述
我们返回E盘,看一下项目结构:
在这里插入图片描述
和src同一个目录下有一个pom.xml就是maven自动帮我们创建好的pom文件:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.zyw</groupId>
  5. <artifactId>myWebApp</artifactId>
  6. <packaging>war</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>myWebApp Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <groupId>junit</groupId>
  13. <artifactId>junit</artifactId>
  14. <version>3.8.1</version>
  15. <scope>test</scope>
  16. </dependency>
  17. </dependencies>
  18. <build>
  19. <finalName>myWebApp</finalName>
  20. </build>
  21. </project>

它自动帮我们添加了单元测试的依赖。

我们接下来学习在IDEA下打开这个项目来操作:

  1. 代开IDEA,点击open:
    在这里插入图片描述
  2. 找到项目,选中pom.xml文件,以项目模式打开:
    在这里插入图片描述
  3. 修改IDEA中的maven配置,分别配置你的maven安装目录,以及setting.xml文件和本地仓库位置(如果你配置了阿里云镜像仓库,一定要保证这里能找到正确的setting文件)
    在这里插入图片描述
  4. 新建java目录,你可能已经发现了,这个项目是没有java目录的,我们自己创建一个:
    在这里插入图片描述
    注意,这样新建成的java目录是没有办法新建.java文件的(可以自己试试),我们需要多做一步操作:右键java,Mark Directory as Source root
    在这里插入图片描述
    这一步操作后,会发现我们的java目录已经变成蓝色的:
    在这里插入图片描述
    那么,接下来就可以在java目录下放我们的java代码了。

如果你的项目中没有resources文件的话,也可以自己创建一个,操作类似,选择Mark Directory as Resources root即可。

添加依赖

这是最关键的,也是我们使用maven最常见的操作,就是为你的项目添加依赖jar包。
打开项目的pom文件,可以发现maven已经为我们添加了单元测试依赖:
在这里插入图片描述
所有的依赖都在dependencies这个节点下面,我们添加外部依赖时也要仿照这样的格式,即使用dependency节点将依赖分开,必须要的参数有三个:groupId,artifactId,version这三个参数。scope是用来指定作用域的。

  1. <dependencies>
  2. <!-- 在这里添加你的依赖 -->
  3. <dependency>
  4. <groupId>xxx</groupId> <!-- 库名称,也可以自定义 -->
  5. <artifactId>yyy</artifactId> <!--库名称,也可以自定义-->
  6. <version>1.0</version> <!--版本号-->
  7. </dependency>
  8. </dependencies>

所有你可能需要用到的外部依赖都可以在maven的官方社区中找到:https://mvnrepository.com/

比如我现在想给上面的项目添加一个servlet-api的jar包来编写servlet,我们打开这个网站直接搜索:在这里插入图片描述
找到正确的jar包,点击进入复制依赖到你的pom文件中,maven会自动帮我们找到依赖:
在这里插入图片描述

命令行操作maven项目

  • 编译:mvn compile  —src/main/java目录java源码编译生成class (target目录下)
  • 测试:mvn test    —src/test/java 目录编译
  • 清理:mvn clean    —删除target目录,也就是将class文件等删除
  • 打包:mvn package  —生成压缩文件:java项目#jar包;web项目#war包,也是放在target目录下
  • 清理并打包: mvn clean package —上面两步的结合,推荐使用
  • 安装:mvn install   —将压缩文件(jar或者war)上传到本地仓库
  • 清理并安装:mvn clean install
  • 部署|发布:mvn deploy  —将压缩文件上传私服

使用命令行操作时,目录必须要在所在项目下才行,推荐在IDEA中的控制台输入,就不必担心这个问题了:
在这里插入图片描述

以最常用的mvn clean package为例,这个命令是说清理之前已经生成的压缩文件,并重新打包:

在这里插入图片描述
那么在我们的项目下就会生成target文件,这个目录下就是放置我们项目打好的包。

maven分模块开发

建议现在外部将项目结构创建好,再用IDEA打开。

  1. 在项目下新建api,model,server目录,把原有的项目的src,pom.xml都复制进去:
    在这里插入图片描述

这是pro3目录下的文件:

在这里插入图片描述

这个目录下的pom.xml文件就是我们的父文件,在这个pom文件中添加modules,其余三个模块都有pom.xml文件,但是不需要配置modules:

  1. <modules>
  2. <module>api</module>
  3. <module>service</module>
  4. <module>model</module>
  5. </modules>

然后来挨个修改每个模块下的项目文件,parent节点为我们将父pom中的依赖加进来,那么每个模块中都可以使用而不用再单独配置。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <!--添加父类依赖-->
  4. <parent>
  5. <groupId>com.westos</groupId>
  6. <artifactId>prod3</artifactId>
  7. <version>1.1-SNAPSHOT</version>
  8. </parent>
  9. <modelVersion>4.0.0</modelVersion>
  10. <groupId>com.westos</groupId>
  11. <artifactId>prod3-api</artifactId>
  12. <packaging>war</packaging>
  13. <!--<version>1.1-SNAPSHOT</version>-->
  14. <name>prod3-api</name>
  15. <url>http://maven.apache.org</url>
  16. <dependencies>
  17. <dependency>
  18. <groupId>junit</groupId>
  19. <artifactId>junit</artifactId>
  20. <version>3.8.1</version>
  21. <scope>test</scope>
  22. </dependency>
  23. </dependencies>
  24. <build>
  25. </build>
  26. </project>
  27. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  28. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  29. <parent>
  30. <groupId>com.westos</groupId>
  31. <artifactId>prod3</artifactId>
  32. <version>1.1-SNAPSHOT</version>
  33. </parent>
  34. <modelVersion>4.0.0</modelVersion>
  35. <groupId>com.westos</groupId>
  36. <artifactId>prod3-model</artifactId>
  37. <packaging>jar</packaging>
  38. <!--<version>1.1-SNAPSHOT</version>-->
  39. <name>prod3-model</name>
  40. <url>http://maven.apache.org</url>
  41. <dependencies>
  42. <!--这里写模块单独引用的依赖-->
  43. </dependencies>
  44. <build>
  45. </build>
  46. </project>
  47. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  48. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  49. <parent>
  50. <groupId>com.westos</groupId>
  51. <artifactId>prod3</artifactId>
  52. <version>1.1-SNAPSHOT</version>
  53. </parent>
  54. <modelVersion>4.0.0</modelVersion>
  55. <groupId>com.westos</groupId>
  56. <artifactId>prod3-service</artifactId>
  57. <packaging>jar</packaging>
  58. <!--<version>1.1-SNAPSHOT</version>-->
  59. <name>prod3-service</name>
  60. <url>http://maven.apache.org</url>
  61. <dependencies>
  62. </dependencies>
  63. <build>
  64. </build>
  65. </project>

配置完成,使用IDEA打开这个工程:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,478人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Maven】Java项目管理工具

    一、为什么要Maven 在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重