且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Maven入门

更新时间:2022-03-19 08:54:41

1. Maven概念模型

Maven入门
图1.png
  • 项目对象模型(Project Object Mobel)
    通过pom.xml定义项目的坐标、项目依赖、项目信息、插件目标等。每个maven工程中都有一个pom.xml文件(核心配置文件),该文件里面定义了工程所依赖的jar包、本工程的坐标、打包运行方式等。
  • 依赖管理系统(Dependency Management System)
    maven的基础核心,通过定义项目所依赖组件的坐标由maven进行依赖管理。也即maven通过坐标对项目工程所依赖的jar包进行统一规范的管理。
    比如:项目依赖Struts2.3.24,通过在pom.xml中定义依赖即可将Struts2的jar包自动加入到工程中,pom.xml中定义依赖如下:
    <dependency>
        <groundId>org.apache.struts</groundId>
        <artifactId>struts2-core</artifactId>
        <version>2.3.24</version>
    </dependency>
    
  • 一个项目生命周期(Project Lifecycle)
    一个软件开发人员每天都在完成项目的生命周期:清理、编译、测试、部署,有的手工完成,有的通过Ant(也是一个项目构建工具)脚本自动完成,maven将项目的生命周期抽象统一为:清理、初始化、编译、测试、报告、打包、部署、站点生成等。


    Maven入门
    图2.png

    maven就是要保证一致的项目构建流程,通过执行一些简单命令即可实现上边生命周期的各个过程。

  • 一组标准集合
    maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。
    我在这儿还是强调一遍:maven工程有自己标准的工程目录结构、有标准的坐标定义。
  • 插件(plugin)目标(goal)
    maven管理项目生命周期过程都是基于插件完成的。

2. maven的仓库

maven工作需要配置仓库,本地的项目A、项目B等通过maven从远程仓库(可以理解为互联网上的仓库)下载jar包并保存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了。可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
下面描述了maven中仓库的类型:


Maven入门
图3.png
  • 本地仓库:用来存储从远程仓库或中间仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。
  • 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认从远程仓库下载。
  • 中间仓库:在maven环境内部内置一个远程仓库地址:http://repo1.maven.org/maven2,它是中间仓库(即特殊的远程仓库),服务于整个互联网,它是由maven团队自己维护的,里面由大量的常用类库,并包含了世界上大部分流行的开源项目构件。

3. 安装

1). 下载和安装--下载地址
Maven入门
图4.png
  • bin目录:mvn.bat(以run方式运行项目)、mvnDebug.bat(以debug方式运行项目)
  • boot目录:maven运行需要的类加载器
  • conf目录:settings.xml,整个maven工具的核心配置文件
  • lib目录:maven运行依赖的jar包
2). 配置环境变量

I. 新建环境变量

Maven入门
图5.png

II. 将%MAVEN_HOME%\bin添加到path环境变量中
Maven入门
图6.png

III. 测试
在命令提示符中输入命令--mvn -v
Maven入门
图7.png

3). 本地仓库配置

本地仓库是用来存放联网下载的maven插件和jar包,maven本地仓库有的jar包将不再从互联网下载,所以本地仓库就相当于一个缓存。
在maven的安装目录中的conf目录下有一个settings.xml文件,在这个文件中可配置本地仓库


Maven入门
图8.png

如果本地仓库不配置(那么就会从互联网上下载jar包,而且下载速度贼慢),那么默认的本地仓库的位置就是Maven入门{user.home}表示windows用户目录,在win7系统下如下:

Maven入门
图9.png

  • 全局settings配置文件:就是maven的安装目录中的conf目录下的settings.xml文件。该文件里面的所有配置可应用于所有项目。
  • 用户settings配置文件:在${user.home}/.m2/repository目录下。如果某些用户需要对maven特殊设置,用户可以自定义settings文件
4). eclipse配置maven安装程序

高版本的eclipse默认已经集成了maven的插件,但其实还内置了maven程序,Window->Preferences,搜索maven如下:

Maven入门
图10.png

注意:我们一般不用内置的maven程序,原因是为了在项目中统一maven版本

5). 选择指定的maven程序

点击Add...->>然后选择自己电脑中的maven程序->>点击Finish。


Maven入门
图11.png

然后勾选新增的一项。


Maven入门
图12.png
6). 指定User Settings

点击User Settings->点击Browse...选择settings.xml文件->点击Update Settings,在Local Repository一项会自动填充仓库位置->点击Apply->OK。


Maven入门
图13.png
7). Eclipse浏览本地仓库

Window->Show View->Other->Maven->Maven Repositories.


Maven入门
图14.png

4. 测试项目

1). 新建项目

I. File->Other->Maven->Maven Project->Next


Maven入门
图15.png

II. 勾选Use default Workspace location是将工程创建在默认的路径下


Maven入门
图16.png

III. 点击最后一项->Next
Maven入门
图17.png
  • maven-archetype-quickstart: 普通Java工程
  • maven-archetype-webapp: Web工程
    IV. 配置信息->点击Finish.


    Maven入门
    图18.png
  • Group Id:项目的名称,项目名称以域名的倒序命名(类似java包名),比如我们要创建一个CRM的项目,可写为cn.itcast.crm。
  • Artifact Id:模块名称(子项目名称)。
  • Version:项目当中模块的版本,snapshot(快照版或测试版,没有正式发行)、release(正式发行版本)。
  • Package:包名。Group Id + Artifact Id.
    V. 解决错误
    Maven入门
    图19.png

    错误原因:未Server Runtime.
    解决办法:邮件项目->Build Path->Configure Build Path...->Libraries->Add Library...->Next->apply..
    Maven入门
    图20.png

    Maven入门
    图21.png

    VI. 项目结构
    Maven入门
    图21.png

    *注意:新创建的maven工程的目录结构不是一个完整的目录结构。
    maven工程的一个完整的目录结构为:
project
    /src/main/java       主体程序的java源文件(不要放配置文件)
    /src/main/resources  主体程序所需要的配置文件(不要放java文件)
    /src/test/java       单元测试程序的java源文件
    /src/test/resources  单元测试程序所用的配置文件
    /target              编译输出目录
    /pom.xml
2). 配置

I. 设置maven的编译版本,由于我使用的是JDK1.8,所以要设置maven的编译版本为1.8,即要在maven工程的pom.xml文件中添加如下配置:

<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.mazaiting.cmp</groupId>
    <artifactId>MavenTest</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>MavenTest 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>MavenTest</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

maven运行的时候都是依赖于插件的,包括编译也是需要通过插件——org.apache.maven.plugins(该插件就在你的本地仓库)来完成。
II. 添加完如上配置之后,可发现我们的maven工程上面有一个红叉,如下所示:

Maven入门
图22.png

III. 更新项目。右键项目->Maven->Update Project...


Maven入门
图23.png