Maven项目管理工具详解

文章目录

  • 1、Maven是什么
      • 项目构建
      • 依赖管理
      • 使用maven的好处
  • 2、Maven的下载以及Maven仓库的使用
      • maven仓库
      • 配置阿里云的私服
  • 3、Maven常用命令
  • 4、Maven的生命周期
  • 5、Maven项目工程目录约定
  • 6、pom.xml文件
  • 7、使用IDEA创建Maven项目
  • 8、IDEA对Maven项目的管理
  • 9、发布项目
      • 使用tomcat插件发布项目
      • 使用传统方式发布项目
  • 10、jar包依赖范围的介绍

1、Maven是什么

  • 首先在了解Maven之前,我们可以发现之前的Web项目,使用到了很多的jar包,比如数据库连接的、第三方工具类等,这都需要我们自己手动下载好对应的jar包之后,放在项目下的lib目录中,并手动依赖;这些工作难度不大,但是非常琐碎且耗时。如果每一个项目都自己搞一套配置,并且经常需要维护升级,肯定会一团糟。我们需要的是一个标准化的Java项目管理和构建工具。
  • maven 翻译为"专家",“内行”,是Apache下的一个纯 java 开发的开源项目,它是一个项目管理工具,使用 maven 对 Java 项目进行构建、依赖管理 当前使用 maven 的项目在持续增长。

项目构建

  • 什么是项目构建:

项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程;

  • 传统项目构建过程

传统的使用IDEA构建项目的过程如下:

Maven项目管理工具详解_第1张图片

  • 构建过程如下:

1)在IDEA中创建一个java web工程
2)在工程中编写源代码及配置文件等
3)对源代码进行编译,java文件编译成class文件
4)执行Junit单元测试
5)将工程打成war包部署至tomcat运行

  • maven项目构建过程:

maven 将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段,后面章节详细介绍每个阶段,这里先大概了解下:

在这里插入图片描述

上图中部分阶段对应命令如下:

清理阶段对应maven的命令是clean,清理输出的class文件
编译阶段对应maven的命令是compile,将java代码编译成class文件。
打包阶段对应maven的命令是package,java工程可以打成jar包,web工程可以打成war包

  • 运行一个maven工程(web工程)需要一个命令:tomat:run

  • maven工程构建的优点:

1、一个命令完成构建、运行,方便快捷。
2、maven对每个构建阶段进行规范,非常有利于大型团队协作开发。

依赖管理

  • 什么是依赖管理:

一个java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包。

举个例子:一个crm系统,它的架构是SSH框架,该crm项目依赖SSH框架,具体它依赖的Hibernate、Spring、Struts2

依赖管理就是对项目所有依赖的jar包进行规范化管理;

  • 传统项目的依赖管理

传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中,如下图:程序员手工将Hibernate、struts2、spring的jar添加到工程中的WEB-INF/lib目录下。

Maven项目管理工具详解_第2张图片

手工拷贝jar包添加到工程中的问题是:
1、没有对jar包的版本统一管理,容易导致版本冲突。
2、从网上找jar包非常不方便,有些jar找不到。
3、jar包添加到工程中导致工程过大。

  • maven项目的依赖管理

maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(maven工程的配置文件)添加jar包的坐标,自动从maven仓库中下载 jar包、运行,如下图:

Maven项目管理工具详解_第3张图片

使用maven依赖管理添加jar的好处:
1、通过pom.xml文件对 jar包 的版本进行统一管理,可避免版本冲突。
2、maven团队维护了一个非常全的maven仓库,里边包括了当前使用的jar包,maven工程可以自动从maven仓库下载 jar包,非常方便。

使用maven的好处

  • 通过上边介绍传统项目和maven项目在项目构建及依赖管理方面的区域,maven有如下的好处:

1、一步构建:maven对项目构建的过程进行标准化,通过一个命令即可完成构建过程。
2、依赖管理:maven工程不用手动导jar包,通过在pom.xml中定义坐标从maven仓库自动下载,方便且不易出错。
3、maven的跨平台,可在window、linux上使用。
4、maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用maven来构建项目。

2、Maven的下载以及Maven仓库的使用

  • Maven的下载地址

Maven 官网:maven.apache.org

Maven项目管理工具详解_第4张图片

  • Maven文档

Maven 3.6.3版本文档:http://maven.apache.org/ref/3.6.3/

  • Maven下载好之后,安装解压即可,下面是解压之后的一些文件夹:

Maven项目管理工具详解_第5张图片

  • 配置Maven:

在环境变量中新建变量名MAVEN_HOME值为Maven的安装路径,然后在PATH中引用你的MAVAEN_HOME如下图:

Maven项目管理工具详解_第6张图片

  • 查看是否配置成功,可在黑窗口中输入mvn –v,出现如下图所示说明配置成功,如果有时出现不是本地命令,可以用管理员身份打开黑窗口;

Maven项目管理工具详解_第7张图片

maven仓库

  • maven的工作需要从仓库下载一些jar包,如下图所示,本地的项目A、项目B等都会通过maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并存在本地仓库本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。

  • 下图描述了maven中仓库的类型:

Maven项目管理工具详解_第8张图片

  • 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找,默认本地仓库位置在${user.dir}/.m2/repository${user.dir}表示windows用户目录

Maven项目管理工具详解_第9张图片

  • 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。

  • 中央仓库 :在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。

  • 配置本地仓库

1、在任意盘符下新建一个目录作为仓库;
2、然后在Maven的安装目录下找到conf目录下的settings.xml配置文件,打开此文件配置本地仓库的路径;
3、本地仓库目录建好后 打开settings.xml文件进行配置本地仓库D:\my_maven_local_repository

Maven项目管理工具详解_第10张图片
Maven项目管理工具详解_第11张图片
在这里插入图片描述

配置阿里云的私服

  • 有时候发现从中央仓库下载jar包,速度有些慢,这时候我们可以在Maven安装目录下的settings.xml文件中配置这样的代码:
  • 也就是说再次去下载jar包的时候,会找到阿里云的私服然后下载,这样速度会很快;
  • 这个私服中收藏了大量的第三方jar包,几乎能满足我们开发的需求;
 <mirrors>
    
	 
<mirror>
      <id>alimavenid>
      <name>aliyun mavenname>
      <url>http://maven.aliyun.com/nexus/content/groups/public/url>
      <mirrorOf>centralmirrorOf>        
    mirror>
  mirrors>

3、Maven常用命令

  • 注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xml文件所在的目录。否则,必以通过参数来指定项目的目录。
命令 含义
mvn –version 显示版本信息
mvn clean 清理项目生产的临时文件,一般是模块下的target目录
mvn compile 编译源代码,一般编译模块下的src/main/java目录
mvn package 项目打包工具,会在模块下的target目录生成jar或war等文件
mvn test 测试命令,或执行src/test/java/下junit的测试用例
mvn install 将打包的jar/war文件复制到你的本地仓库中,供其他模块使用
mvn deploy 将打包的文件发布到远程参考,提供其他人员进行下载依赖
mvn site 生成项目相关信息的网站
mvn eclipse:eclipse 将项目转化为Eclipse项目
mvn dependency:tree 打印出项目的整个依赖树
mvn archetype:generate 创建Maven的普通java项目
mvn tomcat:run 在tomcat容器中运行web应用 需要插件支持
mvn jetty:run 调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用
  • 执行Maven命令:

Maven项目管理工具详解_第12张图片
Maven项目管理工具详解_第13张图片

以上是我们在控制台中输入命令来构建Maven项目,那后面我们都是会在软件中采用图形界面化的方式来运行Maven命令,比如我们的IDEA帮我们集成好了Maven项目的管理模块,那我们就可以使用IDEA来操作Maven项目了;

Maven命令详解:

compile

compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下。cmd进入命令状态,执行mvn compile,如下图提示成功:

Maven项目管理工具详解_第14张图片

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

Maven项目管理工具详解_第15张图片

test

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

clean

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

package

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

Maven项目管理工具详解_第16张图片
Maven项目管理工具详解_第17张图片
install

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

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

4、Maven的生命周期

  • 三套生命周期

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

1、Clean Lifecycle在进行真正的构建之前进行一些清理工作。
2、Default Lifecycle构建的核心部分,编译,测试,打包,部署等等。
3、Site Lifecycle生成项目报告,站点,发布站点。
Maven项目管理工具详解_第18张图片

5、Maven项目工程目录约定

  • 使用maven创建的工程我们称它为maven工程maven工程具有一定的目录规范,如下:
src/main/java —— 存放项目的.java文件
src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件
src/test/java —— 存放所有单元测试.java文件,如JUnit测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置,编译后的class文件会输出到此目录
pom.xml——maven项目核心配置文件
Project
  |-src
  |   |-main
  |   |  |-java        —— 存放项目的.java文件
  |   |  |-resources   —— 存放项目资源文件,如spring, hibernate配置文件
         |-webapp     —— webapp目录是web工程的主目录
            |-WEB-INF
              |-web.xml
  |   |-test
  |      |-java        ——存放所有测试.java文件,如JUnit测试类
  |      |-resources   —— 测试资源文件
  |-target             —— 目标文件输出位置例如.class.jar、.war文件
  |-pom.xml           —— maven项目核心配置文件
  • Maven工程的目录结构必须遵循上面的结构,我们可以手动去创建Maven的目录结构,当然我们一般是通过软件帮我们创建的,不管是软件创建,还是手动创建,都必须遵循Maven的目录结构;

  • 如图所示 IDEA 创建出来的Maven项目结构如下:

Maven项目管理工具详解_第19张图片

6、pom.xml文件

  • 一个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>
  • 一个项目生命周期(Project Lifecycle)

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

在这里插入图片描述

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

  • 一组标准集合

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

  • 插件(plugin)目标(goal)

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

  • 定义maven坐标

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

<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>org.westos</groupId>
<!-- 模块名称 -->
<artifactId>maven-first</artifactId>
<!-- 当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging > :打包类型
	jar:执行package会打成jar包
	war:执行package会打成war包
	pom :用于maven工程的继承,通常父工程设置为pom

Maven项目管理工具详解_第20张图片

7、使用IDEA创建Maven项目

  • 1、首先在IDEA中配置Maven:

Settings——>Maven——>进行以下配置:
Maven项目管理工具详解_第21张图片
Maven项目管理工具详解_第22张图片

  • 2、使用IDEA创建一个Maven项目:

File-New-Project 弹出如下窗口 –选择Maven项目:
Maven项目管理工具详解_第23张图片
继续下一步:
Maven项目管理工具详解_第24张图片
继续下一步:
Maven项目管理工具详解_第25张图片
继续下一步:
Maven项目管理工具详解_第26张图片

【注意】:如果是第一次创建该项目,Maven需要联网下载一些插件,花费一定的时间;

  • 3、补全Maven项目的目录结构:

最开始创建的Maven项目目录结构不完整,我们需要手动添加一些文件夹;注意层次结构以及文件夹的名称要正确;

创建好文件夹之后还需要改变他们的类型,不然用不了;

Maven项目管理工具详解_第27张图片

至此我们的Maven目录结构就设置好了

Maven项目管理工具详解_第28张图片

  • 设置目录的另外两种方式:

Maven项目管理工具详解_第29张图片
Maven项目管理工具详解_第30张图片

8、IDEA对Maven项目的管理

  • 一般 Maven 的项目我们都可以脱离IntelliJ IDEA的项目配置功能进行独立的管理和构建的,但我们任然可以通过 IntelliJ IDEA 提供的Maven 管理工具进行项目的管理和构建;

  • 首先看下IDEA中关于Maven提供的工具怎么使用:

Maven项目管理工具详解_第31张图片

  • 管理和创建Maven项目的按钮的含义:

Maven项目管理工具详解_第32张图片

  • 最开始如果我们在Maven管理的Web项目下创建一个Servlet,会发现直接报错,这是因为Servlet找不到API;

Maven项目管理工具详解_第33张图片
我们需要在pom.xml配置文件中通过jar包的坐标,去仓库中依赖项目所需要的jar包;

Maven项目管理工具详解_第34张图片
Maven项目管理工具详解_第35张图片

  • 如何搜索我们需要的jar包:http://mvnrepository.com/

Maven项目管理工具详解_第36张图片

  • 还有一种方式搜索本地仓库的jar包自动添加jar包坐标,在你的pom.xml文件中 按alt+insert快捷键弹出一个框:

Maven项目管理工具详解_第37张图片

有时候可能提示出来的jar包不全,可以更新一下本地仓库,因为有时你刚从远程仓库下载到本地仓库的jar包,没有提示出来

Maven项目管理工具详解_第38张图片

9、发布项目

使用tomcat插件发布项目

  • 步骤:首先配置pom.xml文件,在标签内部配置一个tomcat插件,

<plugin>
  <groupId>org.apache.tomcat.mavengroupId>
  <artifactId>tomcat7-maven-pluginartifactId>
  <version>2.2version>

<configuration>
  
  <port>8080port>
  
  <path>/abcpath>
  
  <uriEncoding>UTF-8uriEncoding>
configuration>
plugin>
  • 然后再添加我们的Maven项目:

Maven项目管理工具详解_第39张图片
Maven项目管理工具详解_第40张图片

  • 最后启动项目:

Maven项目管理工具详解_第41张图片

  • 注意在发布项目之前检查你的pom.xml中第三方jar包的坐标;

后台代码:

@WebServlet(name = "ServletDemo1", value = "/demo1")
public class ServletDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("进来了");
    }

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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>

  <groupId>org.westosgroupId>
  <artifactId>myMavenDemoartifactId>
  <version>1.0-SNAPSHOTversion>
  <packaging>warpackaging>

  <name>myMavenDemo Maven Webappname>
  
  <url>http://www.example.comurl>

  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.7maven.compiler.source>
    <maven.compiler.target>1.7maven.compiler.target>
  properties>

  <dependencies>
    
    <dependency>
      <groupId>javax.servletgroupId>
      <artifactId>jstlartifactId>
      <version>1.2version>
    dependency>
    
    <dependency>
      <groupId>taglibsgroupId>
      <artifactId>standardartifactId>
      <version>1.1.2version>
    dependency>
    
    <dependency>
      <groupId>javax.servletgroupId>
      <artifactId>jsp-apiartifactId>
      <version>2.0version>
      <scope>providedscope>
    dependency>

    <dependency>
      <groupId>javax.servletgroupId>
      <artifactId>javax.servlet-apiartifactId>
      <version>4.0.1version>
      <scope>providedscope>
    dependency>
    
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.12version>
      <scope>testscope>
    dependency>
  dependencies>

  <build>
    <finalName>myMavenDemofinalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.tomcat.mavengroupId>
          <artifactId>tomcat7-maven-pluginartifactId>
          <version>2.2version>

          <configuration>
            
            <port>8080port>
            
            <path>/abcpath>
            
            <uriEncoding>UTF-8uriEncoding>
          configuration>
        plugin>
      plugins>
    pluginManagement>
  build>
project>

最终结果

在这里插入图片描述
在这里插入图片描述

使用传统方式发布项目

  • 和之前发布的web项目一样,使用传统的发布项目的方式的时候,依然是配置本地的tomcat,

Maven项目管理工具详解_第42张图片
Maven项目管理工具详解_第43张图片

10、jar包依赖范围的介绍

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

Maven项目管理工具详解_第44张图片
Maven项目管理工具详解_第45张图片
Maven项目管理工具详解_第46张图片

你可能感兴趣的:(Java,Web)