Maven

Maven

为什么是 Maven

  • 一个项目就是一个工程

  • 项目中使用 jar 包,需要“复制”、“粘贴”项目的lib中

  • jar 包需要的时候每次都要自己准备好或到官网下载

  • jar 包版本不一致的风险

  • 一个 jar 包依赖其他的 jar 包需要自己手动的加入到项目中

概述

Apache Maven 是一个软件项目管理和依赖管理工具。基于项目对象模型(POM:Project Object Model)的概念,Maven 可以从一个中心信息块管理项目的构建、报告和文档。

无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷开发,Maven 都能大显身手。

官方网址:Maven – Welcome to Apache Maven

以下是使用 Maven 构建项目的各个环节

环节描述
清理clean将以前编译得到的旧文件class字节码文件删除
编译compile将java源程序编译成class字节码文件
测试test自动测试,自动调用junit程序
报告report测试程序执行的结果
打包package动态Web工程打War包,java工程打jar包
安装installMaven特定的概念-----将打包得到的文件复制到“仓库”中的指定位置
部署deploy将动态Web工程生成的war包复制到Servlet容器下,使其可以运行

核心功能【重点】

  • 更简单的构建过程

  • 统一构建系统

  • 优质工程咨询

  • 透明地迁移到新功能

  • 最佳实践开发指南

Maven 环境配置

下载

下载链接:Maven – Download Apache Maven

安装

Maven 目录

目录描述
bin包含 mvn 的一些可执行程序
boot包含 plexus-classworlds 类加载器的框架
conf包含 settings.xml 在内的配置文件
libMaven 运行时所需要的 Java 类库
LICENSE、NOTICE、README.txt简要介绍

配置环境变量

配置 Maven 仓库

Maven 使用仓库管理各种 jar 包和插件。

Maven 仓库分为:本地仓库(local)、远程仓库(remote)两大类

检索顺序:先检索本地仓库 --> 再检索远程公共仓库 --> 最后检索中央仓库

本地仓库

本地电脑中的仓库。默认位置为:${user:home}/.m2/repository一般需要修改此位置为非 C 盘下。

远程仓库

远程仓库又包括:中央仓库 + 私服 + 其它公共远程仓库 (比如阿里、163等)。

中央仓库

中央仓库是maven自带的远程仓库,默认地址:Central Repository:,由于默认中央仓库的服务器在国外,下载会比较慢,一般需要配置使用国内的公共远程仓库作为中央仓库镜像。注意配置了中央仓库镜像就不再走默认中央仓库。

私服

私服是架设在本机或者局域网中的一种特殊的远程仓库,通过私服可以方便的管理其它所有的外部远程仓库。

  • 节省自己的外网带宽

  • 加速 Maven 构建

  • 部署第三方控件

  • 提高稳定性

  • 降低中央仓库的负荷

修改配置

在 maven 的 conf 目录中找到 settings.xml 文件中进行配置

<!--第一个位置在根节点settings下添加本地仓库位置-->
<localRepository>F:/m2/repository</localRepository>
​
<!--第二个位置,在mirrors节点下添加 中央仓库镜像-->
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
​
<!--第三个位置,在 profiles 节点下添加 jdk 版本全局配置,因为默认为1.5-->
<profile>
    <id>jdk-1.8</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
    </activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</profile>

Idea 配置 Maven

更新 Maven 本地仓库

IDEA 创建 Maven 项目

Maven 入门

Maven 项目目录结构

约定大于配置:能使用约定好的方式,就不要配置。

手动创建目录结构:

maven_project_name
    --src
        --main
            --java
                --com
                    --fc
                        Hello.java
            --resources
            --webapp
                --WEB-INF
                    --web.xml
        --test
    --pom.xml

目录说明

参数描述
maven_project_namemaven 项目名
srcjava 源文件目录
main项目主体目录
java源代码目录
resources资源目录
webappweb 项目目录
test项目测试目录
pom.xmlmaven项目核心配置文件

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>
​
    <!--组织id:公司名-->
    <groupId>com.fc</groupId>
    <!--项目名或者模块名-->
    <artifactId>testmaven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--打包形式 jar包-->
    <packaging>jar</packaging>
    <!--依赖-->
    <dependencies>
        <!--junit单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
​
</project>

使用命令创建(了解)

mvn archetype:generate -DgroupId=com.fc.maven -DartifactId=maven02 -DinteractiveMode=false -DarchetypeCatalog=internal

Maven 常见命令

Maven 的另一个核心功能是项目构建。

构建包括:清理、编译、测试、打包、安装、部署、运行等。这些过程都可以使用Maven命令来完成。

每个 maven 命令都可以通过对应的插件来完成。

clean

# 清理(删除)编译的文件
mvn clean
​
# 使用插件
maven-clean-plugin:2.5:clean

compile

# 编译主目录的文件
mvn compile
​
# 使用插件
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile

test

# 编译并运行test目录的代码
mvn test
​
# 使用插件
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test

package

# 打包项目,jar包或war包
mvn package
​
# 使用插件
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test
maven-jar-plugin:2.4:jar

install

# 安装到仓库
mvn install

# 使用插件
maven-resources-plugin:2.6:resources
maven-compiler-plugin:3.1:compile
maven-resources-plugin:2.6:testResources
maven-compiler-plugin:3.1:testCompile
maven-surefire-plugin:2.12.4:test
maven-jar-plugin:2.4:jar
maven-install-plugin:2.4:install

其他命令

# 部署,部署到私服
mvn deploy

# 运行
mvn tomcat:run

Maven 构建生命周期

  1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作。Clean生命周期一共包含了三个阶段:

    1. pre-clean 执行一些需要在clean之前完成的工作

    2. clean 移除所有上一次构建生成的文件

    3. post-clean 执行一些需要在clean之后立刻完成的工作

  2. Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

  3. Site Lifecycle 生成项目报告,站点,发布站点。

    1. pre-site 执行一些需要在生成站点文档之前完成的工作

    2. site 生成项目的站点文档

    3. post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

    4. site-deploy 将生成的站点文档部署到特定的服务器上

Maven POM 文件

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

每一个项目都有一个 POM 文件。POM 文件即 pom.xml,应该放在项目的根目录下。一个项目如果分为多个子项目,一般来讲,父项目有一个 POM 文件,每一个子项目都有一个POM文件。在这种结构下,既可以一步构建整个项目,也可以各个子项目分开构建。

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

POM 中可以指定以下配置:

  • 项目依赖

  • 插件

  • 执行目标

  • 项目构建 profile

  • 项目版本

  • 项目开发者列表

  • 相关邮件列表信息

基本的 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">
    <!--maven版本-->
    <modelVersion>4.0.0</modelVersion>

    <!--组织id:公司名-->
    <groupId>com.fc</groupId>
    <!--项目名或者模块名-->
    <artifactId>testmaven</artifactId>
    <!--版本号-->
    <version>1.0-SNAPSHOT</version>
    <!--打包形式 jar包-->
    <packaging>jar</packaging>

</project>

【注意】所有 POM 文件都需要 project 元素和三个必需的标签:groupId,artifactId,version。这个必须元素叫做坐标(GAV)

Maven 引入外部依赖

Maven 仓库:

https://mvnrepository.com/

Maven搜索-最快捷的Maven搜索-由源码阅读网提供技术服务

引入多个依赖只需在 dependencies 标签下声明对应的 dependency 标签即可

<!--依赖-->
<dependencies>
    <!--junit单元测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

【注意】Scope依赖范围:

  • compile(编译范围) compile是默认的范围,会被打包。

  • provided(已提供范围) provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。它们不是传递性的,也不会被打包。

  • runtime(运行时范围) runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。

  • test(测试范围)只有在测试编译和测试运行阶段可用。

  • system(系统范围)必须显式的提供一个对于本地系统中JAR文件的路径。注意该范围是不推荐使用。

统一管理依赖的版本

<?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>

    <artifactId>Maven_Project</artifactId>
    <groupId>com.fc</groupId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <!--自定义依赖版本-->
        <spring.version>5.3.3</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <!--使用自定义的依赖版本-->
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <!--使用自定义的依赖版本-->
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <!--使用自定义的依赖版本-->
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</project>

在 Maven 项目中使用 Web 组件

<build>
    <!--添加插件-->
    <plugins>
        <!--添加Tomcat插件-->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <!--Tomcat相关配置-->
            <configuration>
                <port>8080</port>
                <!--编码集-->
                <uriEncoding>UTF-8</uriEncoding>
                <!--访问路径-->
                <path>/testMaven</path>
            </configuration>
        </plugin>
    </plugins>
</build>

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.fc</groupId>
    <artifactId>maven_project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--因为是web项目,所以打包方式声明为war-->
    <packaging>war</packaging>

    <!--添加jar包依赖-->
    <dependencies>
        <!--Servlet-api-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <!--声明此jar包的作用域为编译期-->
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <!--添加插件-->
        <plugins>
            <!--添加Tomcat插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <!--Tomcat相关配置-->
                <configuration>
                    <!--端口-->
                    <port>8080</port>
                    <!--编码集-->
                    <uriEncoding>UTF-8</uriEncoding>
                    <!--访问路径-->
                    <path>/testMaven</path>
                </configuration>
            </plugin>
        </plugins>
        
        <resources>
            <!--需要设置打包的文件 特别是非java文件-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

【注意】使用时直接复制粘贴,修改groupId、artifactId、path等参数即可

Maven 相关命令【了解】

命令描述
mvn version显示当前版本信息
mvn compile编译源代码
mvn test-compile编译测试代码
mvn test运行测试
mvn site生成site
mvn eclipse:eclipse生成eclipse项目
mvn idea:idea生成idea项目
mvn clean清除产生的项目
mvn package打包
mvn jar:jar只打jar包
mvn source:jar源码打包
mvn tomcat7:run在tomcat容器中运行web应用
mvn jetty:run调用Jetty插件的Run目标在Jetty Servlet容器中启动web应用

补充:Eclipse 操作 Maven

![Eclipse操作](http://bufferc.store/images/202202142048707.gif)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值