# 第03章 Maven常用命令

# 3.1 Maven指令

# 3.1.1 compile

compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下。

cmd进入命令状态,执行mvn compile,如下图提示成功:

1555835293563

查看 target目录,class文件已生成,编译完成。

1555835304983

# 3.1.2 test

test是maven工程的测试命令 mvn test,会执行src/test/java下的单元测试类。

cmd执行mvn test执行src/test/java下单元测试类,下图为测试结果,运行1个测试用例,全部成功。

1555835330430

# 3.1.3 clean

clean是maven工程的清理命令,执行 clean会删除target目录及内容。

# 3.1.4 package

package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。

# 3.1.5 install

install是maven工程的安装命令,执行install将maven打成jar包或war包发布到本地仓库。

从运行结果中,可以看出:当后面的命令执行时,前面的操作过程也都会自动执行,

# 3.1.6 Maven指令的生命周期

maven对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:

  • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  • Site Lifecycle 生成项目报告,站点,发布站点。

# 3.1.7 Maven的概念模型

Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

1555835552936

  • 项目对象模型 (Project Object Model)

一个maven工程都有一个pom.xml文件,通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标等;

  • 依赖管理系统(Dependency Management System)

通过maven的依赖管理对项目所依赖的jar 包进行统一管理。

比如:项目依赖junit4.9,通过在pom.xml中定义junit4.9的依赖即使用junit4.9,如下所示是junit4.9的依赖定义:

<!-- 依赖关系 -->
<dependencies>
    <!-- 此项目运行使用junit,所以此项目依赖junit -->
    <dependency>
        <!-- junit的项目名称 -->
        <groupId>junit</groupId>
        <!-- junit的模块名称 -->
        <artifactId>junit</artifactId>
        <!-- junit版本 -->
        <version>4.9</version>
        <!-- 依赖范围:单元测试时使用junit -->
        <scope>test</scope>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 一个项目生命周期(Project Lifecycle)

使用maven完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven将这些过程规范为一个生命周期,如下所示是生命周期的各各阶段:

1555835697499

maven通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行mvn compile执行编译、执行mvn clean执行清理。

  • 一组标准集合

maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。

  • 插件(plugin)目标(goal)

maven 管理项目生命周期过程都是基于插件完成的。

# 3.2 IDEA开发Maven项目

# 3.2.1 IDEA的Maven配置

打开->File->Settings配置maven

依据图片指示,选择本地maven安装目录,指定maven安装目录下conf文件夹中settings配置文件

1555835787676

# 3.2.2 IDEA中创建一个Maven的web工程

1555835836380

选择idea提供好的maven的web工程模板

1555835854385

点击Next填写项目信息

1555835981107

点击Next,此处不做改动。

1555835991375

点击Next选择项目所在目录

1555836011241

点击Finish后开始创建工程,耐心等待,直到出现如下界面。

1555836026190

手动添加src/main/java目录,如下图右键main文件夹->New->Directory

1555836052535

创建一个新的文件夹命名为java

1555836065451

点击OK后,在新的文件夹java上右键->Make Directory as->Sources Root

1555836083488

# 3.2.2.1 创建一个Servlet

src/java/main创建了一个Servlet,但报错

1555836114385

要解决问题,就是要将servlet-api-xxx.jar包放进来,作为maven工程应当添加servlet的坐标,从而导入它的jar

# 3.2.2.2 在pom.xml文件添加坐标

直接打开hello_maven工程的pom.xml文件,再添加坐标

1555836145015

添加jar包的坐标时,还可以指定这个jar包将来的作用范围。

每个maven工程都需要定义本工程的坐标,坐标是maven对jar包的身份定义,比如:入门程序的坐标定义如下:

<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>com.itheima</groupId>
<!-- 模块名称 -->
<artifactId>hello_maven</artifactId>
<!-- 当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本 -->
<version>0.0.1-SNAPSHOT</version>
1
2
3
4
5
6

<packaging>:打包类型

  • jar:执行package会打成jar包
  • war:执行package会打成war包

pom :用于maven工程的继承,通常父工程设置为pom

# 3.2.2.3 坐标的来源方式

添加依赖需要指定依赖jar包的坐标,但是很多情况我们是不知道jar包的的坐标,可以通过如下方式查询:

http://search.maven.org/

http://mvnrepository.com/

网站搜索示例:

1555836273456

1555836283293

# 3.2.3 依赖范围

A依赖B,需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:

  • compile:编译范围,指A在编译时依赖B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包;
  • provided:provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用, provided依赖在编译和测试时需要,在运行时不需要,比如:servlet api被tomcat容器提供;
  • runtime:runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于运行时需要所以runtime范围的依赖会被打包;
  • test:test范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:junit。由于运行时不需要所以test范围依赖不会被打包;
  • system:system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用;

1555836404742

在maven-web工程中测试各各scop。

测试总结:

  • 默认引入 的jar包 ------- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )
  • servlet-api 、jsp-api ------- provided (编译、测试 有效, 运行时无效 防止和tomcat下jar冲突)
  • jdbc驱动jar包 ---- runtime (测试、运行 有效 )
  • junit ----- test (测试有效)

依赖范围由强到弱的顺序是:compile>provided>runtime>test

# 3.2.4 项目中添加的坐标

1555836474074

# 3.2.5 设置JDK的编译版本

设置编译版本为1.8,这里需要使用maven的插件来设置:

在pom.xml中加入:

<build> 
    <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>
1
2
3
4
5
6
7
8
9
10
11
12
13

# 3.2.6 编写Servelt

在src/main/java中创建ServletTest

1555836562451

# 3.2.7 编写JSP

1555836629938

# 3.2.8 在web.xml中配置Servlet访问路径

1555836646658

# 2.2.9 添加tomcat7插件

在pom文件中添加如下内容

1555836669636

此时点击idea最右侧Maven Projects,就可以看到我们新添加的tomcat7插件双击tomcat7插件下tomcat7:run命令直接运行项目

1555836708112

也可以直接点击如图按钮,手动输入tomc7:run命令运行项目

1555836739813

点击后弹出如下图窗口

1555836749916

# 3.2.10 运行结果

1555836793119

Last Updated: 10/20/2019, 11:49:45 PM