项目管理工具——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放一块,找起来方便):

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

中央仓库

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

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

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

远程仓库

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

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

配置Maven阿里云镜像

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

  1. 在config目录下的setting.xml中进行全局配置
    打开setting.xml文件,找到 mirrors 节点上,添加内容如下:
<mirrors>
	<!--配置maven阿里云镜像-->
	<mirror>
			<id>nexus-aliyun</id>
			<mirrorOf>central</mirrorOf>
			<name>Nexus aliyun</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>	
<mirrors>
  1. 在pom.xml文件中进行单项目配置
    pom文件中,没有mirror元素。在pom文件中,通过覆盖默认的中央仓库的配置,实现中央仓库地址的变更。
<repositories>  
        <repository>  
            <id>alimaven</id>  
            <name>aliyun maven</name>  
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
            <!-- 是否开启发布版构件下载 --> 
            <releases>  
                <enabled>true</enabled>  
            </releases>  
             <!-- 是否开启快照版构件下载 -->
            <snapshots>  
                <enabled>false</enabled>  
            </snapshots>  
        </repository>  
</repositories>

Maven依赖的搜索顺序

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

优先级:

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

在这里插入图片描述

POM

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

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

POM 中可以指定以下配置:

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

一个简单的pom文件:

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

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

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

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

打开cmd,直接输入命令:

mvn archetype:generate 
-DgroupId=com.zyw.helloworld 
-DartifactId=my-app 
-DarchetypeArtifactId=maven-archetype-quickstart 
-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,切换到你想创建项目的目录下:

mvn archetype:generate 
-DgroupId=com.zyw 
-DartifactId=myWebApp 
-DarchetypeArtifactId=maven-archetype-webapp 
-DinteractiveMode=false

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

在这里插入图片描述
我们返回E盘,看一下项目结构:
在这里插入图片描述
和src同一个目录下有一个pom.xml就是maven自动帮我们创建好的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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.zyw</groupId>
  <artifactId>myWebApp</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>myWebApp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>myWebApp</finalName>
  </build>
</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是用来指定作用域的。

<dependencies>
    <!-- 在这里添加你的依赖 -->
    <dependency>
        <groupId>xxx</groupId>  <!-- 库名称,也可以自定义 -->
        <artifactId>yyy</artifactId>    <!--库名称,也可以自定义-->
        <version>1.0</version> <!--版本号-->
    </dependency> 
</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:

  <modules>
      <module>api</module>
      <module>service</module>
      <module>model</module>
  </modules>

然后来挨个修改每个模块下的项目文件,parent节点为我们将父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/maven-v4_0_0.xsd">
    <!--添加父类依赖-->
    <parent>
        <groupId>com.westos</groupId>
        <artifactId>prod3</artifactId>
        <version>1.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.westos</groupId>
    <artifactId>prod3-api</artifactId>
    <packaging>war</packaging>
    <!--<version>1.1-SNAPSHOT</version>-->
    <name>prod3-api</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <build>

    </build>
</project>

<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/maven-v4_0_0.xsd">
    <parent>
        <groupId>com.westos</groupId>
        <artifactId>prod3</artifactId>
        <version>1.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.westos</groupId>
    <artifactId>prod3-model</artifactId>
    <packaging>jar</packaging>
    <!--<version>1.1-SNAPSHOT</version>-->
    <name>prod3-model</name>
    <url>http://maven.apache.org</url>


    <dependencies>
		<!--这里写模块单独引用的依赖-->
    </dependencies>
  
    <build>

    </build>
</project>

<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/maven-v4_0_0.xsd">
    <parent>
        <groupId>com.westos</groupId>
        <artifactId>prod3</artifactId>
        <version>1.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.westos</groupId>
    <artifactId>prod3-service</artifactId>
    <packaging>jar</packaging>
    <!--<version>1.1-SNAPSHOT</version>-->
    <name>prod3-service</name>
    <url>http://maven.apache.org</url>

    <dependencies>

    </dependencies>
    <build>

    </build>
</project>

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值