Maven使用和理论

Maven

Maven是什么,Maven的作用是什么?

Maven是一种统一管理jar包的工程结构。因为使用普通java工程需要的jar包不稳定且出现许多并发问题。

所以Maven的中央仓库提供统一获取。

​ 会导致如下的问题:

1. 包会出现大量的冗余,每个项目或模块都需要导入这些jar包,会有很多重复的包。

2. 在团队开发中,不同团队成员如果使用了同一个jar包,比如:mybatis包,但使用的版本不同,会导致包的冲突。

3. 如果使用了一个jar包,这个jar包依赖了哪些包,我们并不知道。

Maven的下载安装及使用

http://maven.apache.org/download.cgi

使用步骤:

下载完成后,指定文件夹进行解压。不要有中文目录,目录层次不要太深

Maven目录介绍

目录名功能说明
bin可执行文件所在的目录,其中mvn.cmd是它核心执行文件
boot第三方类加载器
confmaven的配置文件所在的目录,其中settings.xml是maven的核心配置文件
lib因为maven是使用java写的,这是它的依赖jar包

配置环境变量

在进行配置前在doc窗口中先确定javac的命令是否可用。若不可用先把JDK的环境重新配置好。

我的电脑—属性—高级设置—环境变量—新建MAVEN_HOME和path路径

MAVEN_HOME=安装目录
Path=%MAVEN_HOME%\bin  

在这里插入图片描述

验证是否配置成功 查看安装目录,JDK目录,GBK编码

在这里插入图片描述

Maven的仓库

Maven通过pom.xml对各种依赖包进行管理。通过pom中的设置找到对应的仓库进行获取。

有三个库的概念

本地仓库 自行从中央或者私服中下载完成后存放在本地当中的仓库

私服仓库 一般是公司中的仓库 所有人在此仓库中获取 私服没有对应jar包就从中央仓库进行获取

中央仓库 由maven公司所有 所有的jar包都从这里获取 中央仓库的地址:https://repo1.maven.org/maven2/

(镜像仓库 由于中央仓库在国外,下载速度异常缓慢,故由国内的团队提供的镜像仓库,镜像的中央仓库)

配置本地仓库

  • 创建一个空repository文件夹 最好是在Maven的安装目录 便于查找

  • 配置本地仓库,当查找jar包的时候可以优先在本地仓库中查找

修改maven的安装目录中conf/settings.xml文件,在53行配置本地仓库为上面的目录。默认是注释掉的。

此处的所有都是默认被注释掉的,复制出来,修改好,使未被注释。

<localRepository>创建的repository空文件夹路径</localRepository> 
  • 修改settings.xml文件,159行指定中央仓库的镜像。这里使用的是阿里云的中央仓库,速度比官方的快很多。注:mirrors 是容器

     <mirrors>    
                  <mirror>
    			  <id>nexus-aliyun</id>
    			  <mirrorOf>*</mirrorOf>
    			  <name>Nexus aliyun</name>
    			  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    		      </mirror>
    		      <mirror>
    			  <id>nexus-osc</id>
    			  <mirrorOf>*</mirrorOf>
    			  <name>Nexus osc</name>
    			  <url>http://maven.oschina.net/content/groups/public/</url>
    		      </mirror>
     </mirrors>
    
  • 修改maven使用JDK的版本,200行。如果不配置就需要在idea中配置。maven默认使用的是JDK1.5的版本,这里使用1.8的版本。

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

至此Maven的运行环境已经配置完成,接下来要开始配置Idea中的运行环境。

Maven的坐标

坐标是获取jar包存在的准确地址的唯一途径。通过这个坐标找到每个jar包。

例如:要引入junit的jar包,只需要在pom.xml配置文件中配置引入junit的坐标即可

坐标元素定义的主要标签

在pom.xml文件中,通过以下三个元素来定义坐标

元素名称说明
groupId仓库中的一级目录 如:org.mybatis 此名字由中央仓库定义
artifactId仓库二级目录 包名 如:mybatis
version要使用的包的版本

在定义maven项目的时候也需要定义这三个标签元素

一般遵从以下原则:

  • groupId:表示一个公司,组织,团体反过来的域名
  • artifactId:表示项目名或模块名
  • version:每个版本号
图片示例各个标签的作用

此处的scope是属于其他标签,作用是包的依赖。后面统一表述。

在这里插入图片描述

如何在线去查询jar包坐标

通常以后开发过程中所有项目依赖的jar包的配置,不需要自己一个个去输入。

由项目小组长来提供,所有成员使用统一的依赖包,坐标都提供好了,我们直接使用就可以了。

如果需要自己找一个jar包的坐标如何去找?

步骤

1.输入这个网站:https://mvnrepository.com 用于在线查询jar包坐标网站

2.在文本框中输入,要找的jar包,按照使用次数进行粘贴,避免踩雷。

在这里插入图片描述

在这里插入图片描述

Idea中的环境配置

1)在全局配置中进行配置,否则每个maven项目都需要进行设置。

在这里插入图片描述

2)指定idea中,Maven路径,配置文件,本地仓库。勾上override勾选框。

在这里插入图片描述

  1. 选择Build,Execution,Deployment–>Build Tools -->Maven–>Runner(也可以直接搜索runner),设置Maven启动虚拟机的选项:VMOption,设置所有资源先从本地仓库查找,如果本地仓库中没有才去互联网找。

  2. 可选,如果测试中汉字没有乱码则不用设置,Maven控制台输出中文如果出现乱码,则进行如下设置。

VMoptions: -Dfile.encoding=GBK  或者 -Dfile.encoding=UTF-8

VMOptions配置多个参数需要使用空格隔开(最好不要配置)

在这里插入图片描述

创建Maven工程

1) 创建新工程 使用骨架直接创建 要使用maven-webapp 不是上方的22-webapp

在这里插入图片描述

2)点击下一步之后的 本项目坐标设置 可根据上述提到的坐标命名规则进行设置

在这里插入图片描述

3)继续点击下一步,直到创建完成工程。到达主页面,左下角有自动导入提示,必须选择不然每次导入依赖包都需要在右边的Maven控制图鉴中进行更新操作。

在这里插入图片描述

在这里插入图片描述

4)创建好之后工程之后会默认存在一个模块。名字为之前设置的坐标名。此时是一个不完整的Maven工程

在这里插入图片描述

5)在main下新建java和Resources包(创建目录) 如果需要用到test文件夹进行测试,那么在main的同级目录下也要创建一个

​ 创建好了之后,在Maven控制台中更新,使其变色。

在这里插入图片描述

  • 重新创建模块时的注意事项

在这里插入图片描述

Jar和War的区别

在使用打包package功能的时候,如果在本项目坐标处没有设置打包类型,默认是jar包

jar包主要用于 三方使用 如 框架,源代码等

war包主要用于项目上线

指定打包的类型:
如果是java工程:打包成jar
如果是web工程: 打包成war

<groupId>GroupProject</groupId>
<artifactId>webapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>     指定打包类型

Tomcat7插件的使用

Maven官方目前只有tomcat7插件,没有提供tomcat8的版本。

  1. 将下面的代码复制成plugins的子元素。这时刷新Maven Projects不会出现任何变化。可以修改端口号和访问地址。 放在dependencies元素的后面
    
![Tomcat7插件显示](D:\Java总结文档\图解\Maven\Tomcat7插件显示.png)<build>
    <plugins>
        <!--Tomcat7插件-->
        <plugin>
            <!--插件在仓库中的坐标-->
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <!--插件配置dependencies-->
            <configuration>
                <!--端口号-->
                <port>8080</port>       此处可以指定端口号
                <!--项目的访问地址-->
                <path>/</path>
                <!--默认编码-->
                <uriEncoding>UTF-8</uriEncoding>
                <!--服务器名-->
                <server>tomcat7</server>
            </configuration>
        </plugin>
    </plugins>
</build>

2)使用插件后,在Maven控制栏中更新一下。

在这里插入图片描述

使用插件的好处是不需要自己进行配置,找到tomcat7 下方的tomcat7run 双击就自动运行,右键有debug。

如果不用插件,就自行配置即可。

Maven中包的依赖

依赖配置

​ 每个项目有多个jar包 但是每个jar包在内部是存在多个依赖关系的,比如 要使用mybatis的jar包就需要其他的jar包来共同使用

​ 依赖指的就是一个jar包需要多个其他jar包一起使用才会生效。

注:不要写错,如果写错在仓库中就找不到这个jar包,但本地仓库中又会生成一个错误的目录结构
有可能导致以后正确地址的jar包也下载不了,解决方法就是去本地仓库中找到这个错误的目录结构删除了

依赖传递

下图中,紫色人物直接依赖 第一级 ,间接依赖后面的所有,因为第一级使用了后面的jar包

在这里插入图片描述

下图中,第一级和第二级jar包冲突,使用第一级的jar包

		 同级jar包冲突,谁加载在前使用谁。

在这里插入图片描述

可选依赖

主动设置,不让其他人看到我所使用的jar包。所以也就不可使用

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<optional>true</optional>   主要是使用该标签进行隐藏,不让其他人看见该包
</dependency>
排除依赖

主动切断,不使用其他jar包中的依赖。被排除的包 无需指定版本标签。

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<exclusions>
		<exclusion>			使用该标签实现切断  
			<groupId>org.hamcrest</groupId>    Junit依赖该包, 但是该模块要去除该包,重新导入其他类型的包代替
			<artifactId>hamcrest-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>

注意:可选依赖和排除依赖都是可以不使用jar包 但是本质上可以理解为

一个是上对下的设置不可继承,一个是下对上的主动切断拒绝继承。

范围依赖

常用依赖范围

  • 什么是依赖范围:选取上面三种类路径中一种或多种

  • 通过标签:<scope>标签指定jar包的依赖范围

  • 默认是:如果不指定默认是三种类路径下都可以使用,三种类路径起名:compile

依赖范围

依赖范围编译类路径测试类路径运行时类路径
compileYYY
providedYY-
runtime-YY
test-Y-

注意: 新建的项目 会自动创建Junit的依赖包 并且附上test的依赖,导致只能在test文件中使用Junit

Maven的生命周期

什么是生命周期:项目从立项开始到项目开发结束的整个过程,maven将一些开发过程中标准操作设置成一个个命令,可以使用这些命令来简化这些操作。

在这里插入图片描述

clean命令

命令作用:用于清除target目录,类似于清除缓存 。target目录是项目在执行期间自动生成的,类似于以前的out目录。

test命令

命令作用:执行test目录下所有的测试类和测试方法,注:类名和方法名必须以test开头,这是代码的规范。

compile命令

命令作用:编译main目录下所的Java源代码,生成字节码文件。不会去编译test目录下东西

package命令

命令作用:用于把项目打包,如果是java工程,打包成jar。如果是web工程,打包成war,前提是在pom.xml文件中已经配置。

将整个项目打包到target目录下,以后要使用就可以从target目录下复制出来。会重新执行生命周期前面的命令,如果前面的命令执行失败,则打包也失败。

install命令

命令作用:会执行上面所有的命令,先清除,再编译,再执行测试,再打包,安装到本地仓库中去。安装完毕后,在本地仓库中可以找到当前项目创建的war包信息

在使用任何一个操作,都会将该操作以上的所有操作都执行一次。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值