Maven的安装配置以及使用IDEA配置创建Maven

maven是什么

       maven翻译为“专家”,“内行”。Maven是Apache下的一个纯java开发的开源项目,它是一个项目管理工具,使用maven对java项目进行构建、依赖管理。当前使用Maven的项目在持续增长。

什么是项目构建

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

传统项目构建过程


构建过程如下:

       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目录下。

手工拷贝jar包添加到工程中的问题是:

1、没有对jar包的版本统一管理,容易导致版本冲突。

2、从网上找jar包非常不方便,有些jar找不到。

3、jar包添加到工程中导致工程过大。

 

maven项目的依赖管理

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

使用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来构建项目。

 

Maven的下载使用

  1. Maven的下载
  2. 从该网站 http://maven.apache.org/download.cgi 下载

 

  1. 安装-解压即可 注意不要解压在中文路径下
  2. 下面是解压后的目录
  3. 配置Maven

在环境变量中 新建变量名MAVEN_HOME 值为Maven的安装路径

然后在PATH中引用你的MAVAEN_HOME 如下图

 

6 查看是否配置成功可在黑窗口中输入 mvn –v 出现如下图所示说明配置成功

如果有时出现不是本地命令,也不是本地命令,可以用管理员身份打开黑窗口

 

 

maven仓库

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

 

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

 

      

  1. 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找

默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示windows用户目录。

 

  1. 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。

远程仓库可以在互联网内也可以在局域网内。

 

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

 

配置本地仓库

在任意盘符下新建一个目录作为仓库

然后在Maven的安装目录下找到conf目录下的settings.xml配置文件,

打开此文件配置本地仓库的路径

 

下面是我的本地仓库

 

本地仓库目录建好后 打开 settings.xml文件进行配置本地仓库

<localRepository>D:\my_maven_local_repository</localRepository>

 

 

Maven常用命令介绍

注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xml文件所在的目录。否则,必以通过参数来指定项目的目录。

 

 

Maven命令列表

mvn –version

显示版本信息

mvn clean

清理项目生产的临时文件,一般是模块下的target目录

mvn compile

编译源代码,一般编译模块下的src/main/java目录

mvn package

项目打包工具,会在模块下的target目录生成jarwar等文件

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应用 需要插件支持 只有tomcat1.7的插件,没有1.8

所以tomcat8.0用不了此命令

mvn jetty:run

调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用

 

注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xml文件所在的目录。否则,必以通过参数来指定项目的目录。

如下图所示

 

打开命令行窗口后,就可手动输入Maven命令

 

 

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

 

Maven命令

compile

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

 

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

 

 

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

 

test

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

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

 

clean

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

 

package

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

 

install

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

从运行结果中,可以看出:

当后面的命令执行时,前面的操作过程也都会自动执行,

生命周期(了解)

三套生命周期

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

 

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

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

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

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项目结构如下

pom.xml 文件

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

 

  1. 依赖管理系统(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>

 

  1. 一个项目生命周期(Project Lifecycle)

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

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

 

  1. 一组标准集合

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

 

  1. 插件(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

 

下面重点使用IDEA来开发Maven项目

  1. 首先IDEA中配置Maven

 

2.使用IDEA创建一个Maven项目

File-New-Project 弹出如下窗口 –选择Maven项目

 

继续下一步

继续下一步

继续下一步

IDEA开始创建Maven项目,你如果第一次创建,要联网,要下载一些插件,你耐心等待

Maven项目创建好后,我们看一下目录结构,发现,有的目录IDEA并没有帮我们自动创建

需要我们手动创建,注意手动创建要符合Maven规定的目录结构

下来我们手动创建目录

手动创建好后如下图的目录结构

 

 

目录结构创建好后,我们还得改变一下目录的类型,不然用不了

 

继续改其他目录的类型

 

继续改test目录下的子目录的类型

继续

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

再补充一下,设置目录的类型还有一种方式

还有一种方法自动改变Maven工程的目录类型

我们手动创建出来的目录 要改变一下目录类型

再说一种方式

快速改变Maven目录类型的方式

接下来看一下IDEA对Maven项目的管理

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

我们看一下Maven 管理工具这些按钮什么意思

下来我们可以创建一个简单的Servlet 看一下如何在pom.xml文件中添加依赖jia包

创建一个Servlet OK确定

在web.xml中配置好我们创建的Servlet

这时Servlet会报错,是因为Servlet找不到API

接下来我们通过在pom.xml文件中通过配置jar包坐标从仓库中找到我们所需要的jar包

接下来我们看如何去一些网站搜索我们所需要的jar包

我们可以用下面这网站

http://mvnrepository.com/

点击进来选择你需要的jar包版本

复制好jar包坐标粘贴到你工程的pom.xml文件中即可

还有一种方式搜索本地仓库的jar包自动添加jar包坐标

在你的pom.xml文件中 按alt+insert 快捷键 弹出一个框

然后会弹出一个框,罗列出你本地仓库中所有的jar包,你选择你所需要的jar包即可

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

本地仓库的jar包,没有提示出来,你可以更新一下本地仓库 ,如下图

下来我们可以通过tomcat插件发布我们的项目

我们得在pom.xml文件配置一个插件

<build>

        <plugins>

               <plugin>

                      <groupId>org.apache.maven.plugins</groupId>

                      <artifactId>maven-compiler-plugin</artifactId>

                      <configuration>

                             <source>1.7</source>

                             <target>1.7</target>

                             <encoding>UTF-8</encoding>

                      </configuration>

               </plugin>

        </plugins>

</build>

然后我们添加我们的Maven的项目

弹出一个面板,继续选择

继续选择

回到主面板

用插件发布Maven项目是可以的 ,但是现在网上没有找到合适的tomcat8.0的插件

所以下来我们还是用传统方式来发布一下

依赖范围的介绍

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐