maven应用详解

maven是一个项目管理工具,他的作用:1.构建项目及项目的生命周期;2.依赖管理;3.插件管理;

1pom配置详解

pomProject Object Model)指的是项目对象模型,用来描述当前的maven目。使用pom.xml文件来实现。

【补充】

setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。

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.heima.maven</groupId>
    <artifactId>maven‐web2</artifactId> 
    <version>1.0‐SNAPSHOT</version> 
    <packaging>war</packaging>
</project>

【pom文件详解】

<project> pom文件的根节点;

<modelVersion>: 声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,目前POM模型版本是4.0.0

<groupId> maven项目组织id标识符,一般是公司域名倒过来写;

<artifactId>:项目的标识符‐‐项目名。

<version>:项目的版本号;

<packaging>maven项目的打包方式一般配置jar或者war

 

2、依赖管理【重点】

Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。

2.1 Maven坐标

Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。坐标的定义元素如下:

  1. groupId:定义当前项目(jar包)隶属的实际项目组。
  2. artifactId:定义当前项目(jar包)的名称;
  3. version:定义当前项目(jar包)的版本号;

通过上面三个参数我们就能够确定一个唯一版本号的jar包。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring‐core</artifactId>
    <version>4.1.2.RELEASE</version>
</dependency>

2.2 依赖导入

1、使用IDEA工具导入:

IDEA中给我们提供了一种搜索jar包的方式,帮助我们快速导入jar包。使用方法如下:

  1. 第一步:鼠标光标移入到在pom.xml文件中,按Alt+Insert键。会弹出一个选择框:

  1. 选择Dependency后会弹出一个搜索框:输入要添加的jar包的名字

选择需要的jar包后按回车键即可自动添加此依赖;

2、从远程仓库中获取坐标:

如果我们导入的依赖本地仓库中没有,使用IDEA搜索就搜索不到了,我们需要从网络中查找这个依赖的坐标,然后将其添加到pom文件中。添加完成之后,maven会帮我们从私服或中央仓库中下载该依赖。

搜索依赖坐标的方法:

  1. 在中央仓库中查找:http://mvnrepository.com/

将以下坐标复制到pom文件中即可:

pom文件中引入依赖后,会去私服或者中央仓库中下载依赖:如果项目结构的 External Librarites中出现刚引入的依赖,则说明依赖引入成功。

3、依赖配置

我们通过坐标引入需要的依赖之后,有时候不能直接使用当前的依赖。需要对这些依赖进行配置。这些配置包括:依赖范围设置,依赖版本维护。

3.1 依赖范围设置

3.1.1 依赖范围是什么

maven在编译 项目主代码的时候需要使用一套classpath,在编译和执行测试 的时候需要使用另外一套classpath。最后,在实际运行 maven项目的时候又会用到另外一套classpath。不同阶段的classpath需要的依赖不同。所以,我们在导入依赖之后,往往会设置依赖的作用范围。

3.1.2  5种依赖范围

依赖范围就是用来控制依赖(jar包)与着三种classpath(编译classpath,测试classpath,运行classpath)之间的关系的。

Maven有以下几种依赖范围:

compile :编译依赖范围。如果没有指定,默认就是这种依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。

test :测试依赖范围。使用此依赖范围的Maven依赖,只对测试classpath有效。在编译主代码和运行项目期间都不需要使用此依赖。典型的例子就是Junit,它只在编译和运行测试代码时有效。

provided :已提供依赖范围。使用此依赖范围的maven依赖在编译和测试classpath有效,但运行时无效。典型的例子就是servlet‐api。编译和测试的时候需要使用servlet‐api中的方法,但是使用tomcat运行项目的时候不需要,因为tomcat在运行期间会提供这个依赖。

runtime: 运行时依赖范围。使用次依赖范围的maven依赖对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要提供JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。

system :系统依赖范围。该依赖与三种classpath的关系和provided依赖范围完全一致。但是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。systemPath元素可以引用环境变量。

例如:oracle的驱动包,从中央仓库无法下载,需要先下载到本地,再通过本地路径引入。先下载orace的包到本地:

然后在pom文件中导入依赖:

<dependency>
    <groupId>oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>
        D:/software/maven/apache‐maven‐3.5.2/repository/ojdbc6.jar
    </systemPath> 
</dependency>

上述各种依赖范围与三种classpath的关系如下图所示:

 

3.1.3 指定依赖范围的方法

  • 我们在导入依赖的时候,在标签中使用设置即可,如下所示:

 

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring‐core</artifactId>
    <version>4.3.9.RELEASE</version>
    <!‐‐compile是默认的依赖范围,可以不用写出来‐‐>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet‐api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql‐connector‐java</artifactId>
    <version>5.0.8</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>
        D:/software/maven/apache‐maven‐3.5.2/repository/ojdbc6.jar
    </systemPath> 
</dependency>

3.2 依赖版本维护

如果pom文件中引入的依赖太多,各种依赖又有不同的版本,为了统一维护版本。我们可以将依赖的版本号抽取出来进行统一管理。抽取方法如下:

第一步 :在pom.xml中使用属性定义jar包的版本

<properties>
    <spring.version>4.2.4.RELEASE</spring.version>
    <struts.version>2.3.8</struts.version>
</properties>

第二步 :在依赖的中使用${}引入前面定义好的版本

<properties>
    <spring.version>4.2.4.RELEASE</spring.version>
    <struts.version>2.3.8</struts.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring‐context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2‐spring‐plugin</artifactId>
        <version>${struts.version}</version>
    </dependency>
</dependencies>

好处:方便对项目中使用的jar包版本的统一管理。

 

4maven插件

我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。例如编译源代码是由maven-compiler-plugin完成的,但是这些插件都是maven默认的插件,如果需要配置自己的插件,则需要通过插件的坐标来引入插件。插件的坐标可以从maven官方提供的插件列表进行下载:

Maven官方有两个插件列表:

第一个列表的GroupIdorg.apache.maven.plugins,这里的插件最为成熟,具体地址为:

http://maven.apache.org/plugins/index.html

第二个列表的GroupIdorg.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html

常用的插件有编译插件和tomcat插件,这两个插件的坐标及配置如下:

4.1 编译插件 maven-compiler-plugin

<!‐‐JDK编译插件‐‐>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven‐compiler‐plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF‐8</encoding>
    </configuration>
</plugin>

4.2 测试插件maven-surefire-plugin


<!‐‐test插件‐‐>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven‐surefire‐plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <forkMode>once</forkMode>
        <argLine>‐Dfile.encoding=UTF‐8</argLine>
    </configuration>
</plugin>

4.3 tomcat插件

<!‐‐ tomcat7插件 ‐‐>
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7‐maven‐plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <port>80</port>
        <path>/</path>
    </configuration>
</plugin>

4.3 插件完整配置

所有的插件必须配置在-->

<build>
    <plugins>

    <!‐‐JDK编译插件‐‐>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven‐compiler‐plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF‐8</encoding>
            </configuration>
        </plugin>

    <!‐‐test插件‐‐>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven‐surefire‐plugin</artifactId>
            <version>2.16</version>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>‐Dfile.encoding=UTF‐8</argLine>
            </configuration>
        </plugin>
     </plugins>
</build>

附1:清理maven仓库

初始情况下,我们的本地仓库是没有任何jar包的,此时会从私服去下载(如果没有配置,就直接从中央仓库去下载),可能由于网络的原因,jar包下载不完全,这些不完整的jar包都是以lastUpdated结尾。此时,maven不会再重新帮你下载,需要你删除这些以lastUpdated结尾的文件。如果本地仓库中有很多这样的以lastUpadted结尾的文件,可以执行如下脚本来删除:

在上面的bat文件上右键---》编辑 。修改文件:

修改完毕后,双击运行即可删除maven仓库中的残留文件。

附2:更新依赖索引

有时候给idea配置完maven仓库信息后,在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新ideamaven的索引了,具体做法如下:

打开设置----搜索maven----Repositories----选中本地仓库-----点击Update

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值