Maven介绍

Maven是什么?

java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行

Maven: 翻译为"专家"、“内行”,是Apache下的一个纯Java开发的一个开源项目。
Maven是一个项目管理工具,使用Maven可以来管理企业级的Java项目开发及依赖的管理。
使用Maven开发,可以简化项目配置,统一项目结构。总之,Maven可以让开发者的工作变得更简单。
什么是依赖管理?要明白依赖管理,首先要知道什么是依赖?
一个Java项目中往往会依赖一些第三方的jar包。比如JDBC程序中要依赖数据库驱动包,或者在使用c3p0连接池时,要依赖c3p0的jar包等。这时我们称这些Java项目依赖第三方jar包。
而所谓的依赖管理,其实就是对项目中所有依赖的jar包进行规范化管理。

为什么要使用Maven?

传统的项目(工程)中管理项目所依赖的jar包完全靠人工进行管理,而人工管理jar包可能会产生诸多问题。
1、不使用Maven,采用传统方式管理jar包的弊端:
(1)在一些大型项目中会使用一些框架,比如SSM或者SSH框架,而框架中所包含的jar包非常多(甚至还依赖其他第三方的jar包),如果这些jar包我们手动去网上寻找,有些jar包不容易找到,比较麻烦。
(2)传统方式会将jar包添加到工程中,比如Java工程中将jar包放在工程根目录或者放在自建的lib目录下;JavaWeb工程会将jar包放在:/WEB-INF/lib目录下,这样会导致项目文件的体积暴增(例如,有些项目代码本身体积可能仅仅几兆,而加入jar包后,工程的体积可能会达到几十兆甚至百兆)。
(3)在传统的Java项目中是将所有的jar包统一拷贝的同一目录中,可能会存在jar包文件名称冲突的问题!
(4)在进行项目整合时,可能会出现jar包版本冲突的问题。
(5)在传统java项目中通过编译(手动编译或者在eclipse保存自动编译)、测试(手动在main函数中测试、junit单元测试)、打包部署(手动打war包/手动发布)、运行(手动启动tomcat运行),最终访问程序。
2、使用Maven来管理jar包的优势:
(1)Maven团队维护了一个非常全的Maven仓库(中央仓库),其中几乎包含了所有的jar包,使用Maven创建的工程可以自动到Maven仓库中下载jar包,方便且不易出错。
另外,在Maven构建的项目中,如果要使用到一些框架,我们只需要引入框架的核心jar包,框架所依赖的其他第三方jar包,Maven也会一并去下载。
(2)在Maven构建的项目中,不会将项目所依赖的jar包拷贝到每一个项目中,而是将jar包统一放在仓库中管理,在项目中只需要引入jar包的位置(坐标)即可。这样实现了jar包的复用。
(3)Maven采用坐标来管理仓库中的jar包,其中的目录结构为【公司名称+项目/产品名称+版本号】,可以根据坐标定位到具体的jar包。即使使用不同公司中同名的jar包,坐标不同(目录结构不同),文件名也不会冲突。
(4)Maven构建的项目中,通过pom文件对项目中所依赖的jar包及版本进行统一管理,可避免版本冲突。
(5)在Maven项目中,通过一个命令或者一键就可以实现项目的编译(mvn complie)、测试(mvn test)、打包部署(mvn deploy)、运行(mvn install)等。
还有发布到tomcat服务器中运行: mvn tomcat7:run。如果想实现上面的所有过程,只需要记住一个命令:mvn install
总之,使用Maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会优先使用Maven来构建项目.

Maven安装

下载、安装Maven

1、官方下载地址:http://maven.apache.org/download.cgi

java 第三方依赖包的执行 java依赖包是什么_jar包_02


2、下载绿色版,解压之后就可以使用。

java 第三方依赖包的执行 java依赖包是什么_jar包_03


java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_04


原则: 安装的路径中最好不要有中文和空格!!


3、若要下载旧版本Maven,可以访问:


https://archive.apache.org/dist/maven/maven-3/


java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_05


java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_06

Maven的相关配置

在开发中更多是通过Eclipse+Maven来构建Maven项目,所以这里我们需要将Maven配置到Eclipse开发工具中。
在将安装好的Maven工具配置的Eclipse开发工具中之前,需要做一些相关的配置。

配置本地仓库位置

本地仓库:其实就是本地硬盘上的某一目录,该目录中会包含maven项目中所需要的所有jar包及插件。当所需jar包在本地仓库没有时,从网络上下载下来的jar包也会存放在本地仓库中。
因此本地仓库其实就是一个存放jar包的目录,我们可以指定Maven仓库的位置。
如果不指定,maven本地仓库的默认位置是在c盘,在:
C:/Users/{当前用户}/.m2/repository,例如:

java 第三方依赖包的执行 java依赖包是什么_java_07


可以保持默认,当然也可以修改本地仓库的位置到别的盘符路径。


修改方法:找到[MAVEN_HOME]/conf/目录中的配置文件settings.xml,修改maven仓库的路径。


java 第三方依赖包的执行 java依赖包是什么_远程仓库_08


配置该目录后,以后通过maven下载的jar包将会保存在配置的目录下。


以上内容可以总结为:
  1. 什么是本地仓库?
  2. 本地仓库的默认位置在哪儿?
  3. 配置和不配置本地仓库有什么区别?

配置远程仓库(私服)

当maven项目中需要依赖jar包时,如果本地仓库中没有,就会到远程仓库去下载jar包。
如果不配置远程仓库,默认连接的是中央仓库,由于中央仓库面向的是全球用户,所以在下载jar包时,速度可能会比较慢,效率会比较低。
可以在settings.xml文件中配置连接达内远程仓库(前提是在达内教室,连接的是达内内网)或者连接阿里云远程仓库(需要有外网)。
1、如果连接的是达内内网,可以连接达内远程仓库(如果不配置,默认连接中央仓库,没有外网,连接不了中央仓库,会导致jar包无法下载)。
需要做的是,在settings.xml文件中的<settings>标签下的<mirrors>标签内部添加如下配置,配置达内远程仓库:

<mirror>
		<id>nexus-tedu</id>
    <name>Nexus tedu</name>
    <mirrorOf>central</mirrorOf>
    <url>http://maven.tedu.cn/nexus/content/groups/public/</url>
</mirror>

2、如果在家里、在公司连接的是外网,是无法连接达内的远程仓库,可以选择什么都不配置,默认连接中央仓库,或者可以配置连接阿里云远程仓库(不要使用手机热点网络连接),配置如下:
配置阿里云远程仓库:

<mirror>
    <id>aliyun</id>
    <name>aliyun for maven</name>
    <mirrorOf>*</mirrorOf>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

远程仓库配置总结:

  1. 当所需jar包在本地仓库没有时,会从网络上下载。配置远程仓库其实就是配置,去网络中哪个位置下载jar包到本地。
  2. 如果在公司,并且公司有搭建镜像服务器,推荐使用公司的镜像服务器下载jar包,速度会更快。(如果在达内,使用的是内网,只能配置达内的远程仓库。否则,没有外网也连接不了中央仓库,下载jar包会失败!)
  3. 如果在家里,使用的是外网,可以不配置远程仓库,默认连接中央仓库下载jar包,或者配置阿里云的远程仓库。连接阿里云服务器下载jar包。(注意,如果配置阿里云镜像服务器,不可使用手机热点网络!

配置JDK版本

通过 Maven创建的工程,JDK版本默认是JDK1.5,每次都需要手动改为更高的版本。
这里可以通过修改maven的settings.xml文件, 达到一劳永逸的效果。
配置方式为:打开 {maven根目录}/conf/settings.xml 文件并编辑,在 settings.xml文件内部的 <profiles> 标签内部添加如下配置:

<profile>
    <id>development</id>
    <activation>
    	<jdk>1.8</jdk>
    	<activeByDefault>true</activeByDefault>
    </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>
    </properties>
</profile>

将Maven配置到Eclipse中

将Maven工具配置到Eclipse中,就可以通过Eclipse和自己安装的Maven创建Maven项目了。
1、window右键–> Preferences:

java 第三方依赖包的执行 java依赖包是什么_远程仓库_09


2、点击Maven选项,在右侧选项中勾选 “Download Artifact Sources”:

java 第三方依赖包的执行 java依赖包是什么_java_10


3、点击add将自己安装的Maven添加进来:

java 第三方依赖包的执行 java依赖包是什么_maven_11


4、添加自己安装的Maven:

java 第三方依赖包的执行 java依赖包是什么_java_12


java 第三方依赖包的执行 java依赖包是什么_maven_13


**一定要注意:**自己安装的Maven不要放在桌面上(容易丢失,并且路径中往往有空格),maven的安装路径中也不要包含中文和空格!!


java 第三方依赖包的执行 java依赖包是什么_java_14


5、将默认的maven切换为自己配置的maven:

java 第三方依赖包的执行 java依赖包是什么_jar包_15


6、设置maven的settings文件的位置:

java 第三方依赖包的执行 java依赖包是什么_java_16


7、测试是否配置成功:

window—> show view —> other中搜索"maven",点击下面的选框中的选项


java 第三方依赖包的执行 java依赖包是什么_jar包_17


在弹出的窗口中,查看自己配置的本地仓库和远程仓库镜像:


java 第三方依赖包的执行 java依赖包是什么_jar包_18

Maven的项目构建

通过Maven构建Java项目分为两种方式:
(1)使用简单方式创建:创建Maven的简单Java工程以及创建Maven的简单Web工程
(2)使用模板方式创建:创建使用模板的Java工程以及创建使用模板的Web工程
在利用Maven构建项目时分两种,第一种是:创建简单工程**(Create a simple
project),即在创建时勾选前面的框。

java 第三方依赖包的执行 java依赖包是什么_java_19


(不勾选前面的框,即创建使用骨架(其实就是模版)创建Maven工程)
另,在创建简单工程时,还分为创建
Java工程JavaWeb工程**。下面分别进行演示。

创建简单工程—Java工程

1、空白处右键New —> Maven Project:

java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_20


2、在弹出的窗口中,勾选前面的框,创建一个简单工程(即不使用骨架),进入下一步。

java 第三方依赖包的执行 java依赖包是什么_maven_21


3、在弹出的窗口中,填写内容(Package选择jar,即创建java工程),点击完成即可。

java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_22


在上述内容中,必填的内容有四项:

(1)

Group Id

– 组的名称,通常填写公司名称(比如com.tedu)或者组织名称(org.apache…)


(2)

Artifact Id

– 项目名称或者模块名称


(3)

Version

– 项目的版本,创建的项目默认是0.0.1-SNAPSHOT快照,也叫非正式版,正式版是RELEASE)


(4)

Package

– 项目的类型:jar表示创建的是Java工程,war表示创建的是web工程,pom表示创建的是父工程(当然相对的还有子工程)或者聚合工程,pom目前我们不讨论。


填写完毕后,点击完成即可完成创建简单Java工程


4、切换工程视图为包视图:window --> show view,在弹出的窗口中搜索:

java 第三方依赖包的执行 java依赖包是什么_远程仓库_23

创建简单工程—Web工程

1、空白处右键New —> Maven Project:

java 第三方依赖包的执行 java依赖包是什么_远程仓库_24


2、在弹出的窗口中,勾选前面的框,创建一个简单工程(即不使用骨架),进入下一步。

java 第三方依赖包的执行 java依赖包是什么_jar包_25


3、在弹出的窗口中,填写内容(Package选择war,即创建web工程),点击完成即可。

java 第三方依赖包的执行 java依赖包是什么_java_26


4、创建完成后pom.xml文件会报错,说找不到web.xml文件,例如:

java 第三方依赖包的执行 java依赖包是什么_远程仓库_27


手动添加(拷贝)即可,例如:

java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_28


5、创建Servlet程序,测试运行环境。

java 第三方依赖包的执行 java依赖包是什么_maven_29


上面的错误是因为运行环境中缺少Servlet的jar包,将tomcat运行环境添加过来即可!


!!缺少Servlet运行环境解决方案:

在项目上点击鼠标右键,选择 “Properties” —> “Targeted Runtimes”:


java 第三方依赖包的执行 java依赖包是什么_java_30


或者,在项目中的pom.xml文件中的根标签下添加Servlet的jar包的坐标,引入Servlet的jar包,如下:

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
添加后保存pom文件。若还报错,在项目上右键选择 “Maven” —> “UpdateProject…” 更新工程即可!
6、实现Servlet程序

java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_31


**7、测试访问:**打开浏览器访问地址:

http://localhost/MavenSimpleProJavaweb/HelloServlet

java 第三方依赖包的执行 java依赖包是什么_jar包_32

Maven的目录结构

使用Maven创建的工程我们称它为Maven工程,Maven工程具有一定的目录规范,对目录结构有严格的要求,一个Maven工程要具有如下目录结构:

java 第三方依赖包的执行 java依赖包是什么_maven_33


下面以Maven的Web项目为例,介绍Maven项目中的目录结构:

Maven项目名称(Web项目)
  |-- src/main/java(源码目录):用于存放程序/项目所需要的java源码文件
  |-- src/main/resources(源码目录):用于存放程序/项目所需要的配置文件
  |-- src/test/java(源码目录):用于存放测试程序的java源文件
  |-- src/test/resources(源码目录):用于存放测试程序所需要配置文件
  |-- src/main/webapp:(Web应用的根目录,作用类似于WebContent)
  				 |-- WEB-INF:(受保护的目录)
  				 		|-- web.xml:(Web应用的核心配置文件)
  |-- target/classes(类目录):源码目录中的资源经过编译后,会输出到类目录下。
  |-- pom.xml:Maven项目中非常重要的文件,将来项目需要任何jar包或插件,都可以通过pom文件来导入这些jar包或插件。

导入已有的Maven项目

现将后面通过SSM框架实现的<<永和大王门店管理系统>>(Maven)项目导入到我们的Eclipse开发环境中。
在导入项目时我们通常会通过 “File” --> “Import…” 来导入项目,但是这样能会产生环境问题,例如:如果项目本身自带的环境和我们当前使用的开发环境不一致,就会产生问题。可以按照下面的方式来进行导入。
下面是导入的步骤:
1、创建一个新的Maven工程(JavaWeb工程)
确保已经配置好Maven的环境后,在Eclipse中创建一个新的Maven工程(Javaweb工程),新工程的名字和所导入的工程的名字可以相同也可以不同,例如:

java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_34


2、解压yonghe-ssm.zip压缩包

将下发的 yonghe-ssm 项目解压出来,解压后的结构如下:


java 第三方依赖包的执行 java依赖包是什么_远程仓库_35


打开 yonghe-ssm 目录:


java 第三方依赖包的执行 java依赖包是什么_jar包_36


3、将解压后的目录中的src目录选中并复制。

java 第三方依赖包的执行 java依赖包是什么_maven_37


4、点击新创建的Maven工程右键粘贴,将复制的src目录粘贴到新建的工程中

java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_38


5、打开解压后的目录中的pom.xml文件, 复制其中的内容:

java 第三方依赖包的执行 java依赖包是什么_jar包_39


如果复制后项目或pom文件仍然报错, 可以更新Maven工程


更新Maven工程:在项目上右键选择 “Maven” —> “Update
Project…”
,在弹出的窗口中直接点击OK即可!
6、执行SQL脚本文件,导入数据
打开cmd,连接mysql数据库,执行yonghedb.sql

中的SQL语句,创建数据库、表及插入记录。


7、部署项目到服务器并启动服务器,访问测试

在正确完成上面的操作后,打开浏览器访问如下地址:

http://localhost/yonghe-ssm/index

,可以看到如下界面:


java 第三方依赖包的执行 java依赖包是什么_jar包_40

Maven的依赖管理

依赖(jar包)管理

依赖管理即jar包的管理,那么通过Maven创建的工程是如何管理jar包的?
1、在Maven项目中如何引入jar包?
在Maven创建的项目中,如果需要引用jar包,只需要在项目的pom.xml文件中添加jar包的坐标(GroupID + ArtifactID + Version)即可将jar包引进项目中,之后就可以在项目中使用所引入的jar包了。
例如,现在我们在pom.xml文件中,添加servlet的jar包的坐标如下:

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>servlet-api</artifactId>
	<version>2.5</version>
  <scope>provided</scope>
</dependency>

在pom.xml文件中,添加mysql驱动包的坐标如下:

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.32</version>
</dependency>
2、项目中引入的jar包存放在哪里?
那么问题来了,在pom文件中添加的servlet的jar包坐标,添加的仅仅是一个jar包对应的坐标,而这个jar包到底存放在哪里呢?
了解Maven管理jar包的规则之后,我们可以找到jar包的存放位置是在本地仓库(仓库默认是在:C:\Users\{当前用户}\.m2\repository)的 /javax/servlet/servlet-api/2.5/目录下,例如:

java 第三方依赖包的执行 java依赖包是什么_jar包_41


总结:
  • 在Maven中,所有的jar包全都存放在本地仓库的目录中,如果项目中需要使用某一个jar包,直接在项目的pom.xml文件中通过坐标(GroupID
  • ArtifactID + Version)引入指定位置的jar包即可。
  • 这样可以将项目中所有使用的jar包集中在一个目录(本地仓库)中统一进行管理,需要时通过坐标直接引入即可,而不是在每个项目中都拷贝一份,减少了项目体积,也节省了磁盘空间。
  • 将来如果别人需要导入你的项目,只需要将项目(当然包括pom.xml文件)代码整体传给对方,无需将jar包发送给对方,对方在配置Maven的环境后,Maven会自动根据项目中pom.xml文件里配置的坐标,引入(或下载后再引入)对应的jar包。
    3、如果引入的jar包在本地仓库中没有呢?
  • 如果是刚配置的Maven环境,本地仓库中还没有太多jar包,此时在pom文件中通过坐标引入jar包,而本地仓库中没有这个jar包,这时会怎么样呢?
  • 若本地仓库没有所需要的jar包,则会到远程仓库(也叫私服)或者到中央仓库(也叫公服)中下载。下面我们就来介绍Maven的这三种仓库。

Maven三种仓库

在上面所提到的本地仓库、远程仓库、中央仓库是用来Maven用来更好的管理jar包的所采用的一种方式。下面来了解Maven的三种仓库,以及三种仓库之间的潜在联系。
通过maven构建的项目,会通过项目中的pom.xml文件从远程仓库下载,并保存到本地仓库

java 第三方依赖包的执行 java依赖包是什么_maven_42


本地仓库

:默认的本地仓库位置在:

c:/${user.dir}/.m2/repository

,其中${user.dir}表示windows下的用户目录。本地仓库的作用是,用于保存(存储)从私服或者从中央仓库下载下来的jar包(或插件)。当项目中需要使用jar包和插件时,优先从本地仓库查找。


如果本地仓库中没有所需的jar包,可以到私服或者到中央仓库中下载后再保存到本地仓库。


远程仓库

:远程仓库也叫做私服(Nexus),私服一般由公司搭建并维护(也可以自己搭建)。比如达内有搭建自己的私服服务器(http://maven.tedu.cn/nexus/content/groups/public/),以及阿里云私服服务器(http://maven.aliyun.com/nexus/content/groups/public/)。


如果项目中使用到的jar包或者插件本地仓库中没有,则可以到私服中下载,如果私服中有就直接将jar包保存到本地仓库中;而如果私服中也没有所需的jar包,就到中央仓库(公服)上下载所需要的jar包,下载之后先在私服上保存一份,最后再保存到本地仓库。


中央仓库

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


那么我们在使用Maven构建的Java项目,项目中所使用的jar包会来自哪里呢?例如,通过Maven先后构建项目A和项目B,在项目中都需要依赖第三方jar包:

  • 如果项目A中需要依赖第三方jar包,只需要在项目下的pom文件中引入jar包在本地仓库中的坐标即可使用。如果本地仓库没有所需要的jar包,则会连接私服(需要提前配置)下载所需jar包到本地仓库供项目使用。
  • 如果私服上也没有所需的jar包,则会连接中央仓库下载所需要的jar包保存到私服,再将jar包从私服下载至本地仓库,供项目使用。
  • 如果没有配置私服,则默认连接中央仓库下载所需要的jar包到本地仓库中供项目使用
  • 当项目B也需要依赖第三方jar包时,先到本地仓库中查找所需jar包,如果有则直接引用而无需再次下载,如果仍有部分jar包本地仓库中没有,则同上,即连接私服下载所需jar包到本地仓库。若私服中也没有所需jar包,则连接中央仓库下载jar包到私服,再从私服下载jar包到本地仓库中,供项目使用。

添加依赖:方式一

使用maven插件的索引功能快速添加jar包
这种方式需要本地仓库中已经包含了该jar包,否则搜索不到!!!
1、如果本地仓库中有我们需要的jar包,可以在项目中的pom.xml文件中空白处右键–> Maven --> Add Dependency在弹出的窗口中添加所需要的依赖(jar包),如图:

java 第三方依赖包的执行 java依赖包是什么_jar包_43


**2、**添加依赖示例:添加spring的jar包的坐标到项目中


(1) 在项目中的pom.xml文件中右键 -> Maven -> Add Dependency,在弹出的窗口中输入


“spring”:


java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_44


选中要添加的jar包(坐标会自动填写),点击OK即可完成添加


java 第三方依赖包的执行 java依赖包是什么_远程仓库_45


(2)如果搜索不到jar包(保证本地仓库中已经下载了该jar包),可以尝试重建索引。



java 第三方依赖包的执行 java依赖包是什么_java 第三方依赖包的执行_46


“Maven Repositories” 视图窗口中可以看到如下内容:


java 第三方依赖包的执行 java依赖包是什么_远程仓库_47


在"Local Repositories"上右键选择 “Rebuild Index” 即可重建索引。


完成后,再尝试搜索jar包进行添加。

添加依赖:方式二

1、直接在pom.xml文件中的标签内部添加。例如:在pom.xml文件中添加如下配置,就可以将junit单元测试的jar包引入到项目中来了。
添加依赖:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.9</version>
        <scope>test</scope>
    <dependency>
<dependencies>

2、手动添加依赖需要指定所依赖jar包的坐标,但是在大部分情况下,我们是不知道jar包的坐标的。可以通过访问如下网址,在互联网上搜索查询:
http://mvnrepository.com 或者在公司远程仓库中搜索查询:
http://maven.tedu.cn/nexus
3、示例:添加c3p0的jar包的坐标到项目中

  • 访问上面其中的一个网址,在搜索框中搜索 “c3p0”
  • 在搜索出来的内容中,选择所需要的版本并点击版本,查看该版本的c3p0 jar包所对应的坐标:
  • 将坐标直接拷贝到项目的pom.xml文件中即可:



    4、将上图中右侧选中的坐标拷贝到pom.xml文件中:

扩展:Maven常见问题

拷贝Maven仓库

如果因为网络环境的问题(比如:电脑没有网络),导致jar包无法下载,也可以将别人下载好的(完整的)Maven的本地仓库拷贝过来,放在自己配置的本地仓库中。因为Maven可以支持拷贝别人的仓库。

常见环境问题

问题描述1:**

  • 创建Maven项目时报如下错误:


    或者创建Maven项目目录结构不全(比如只有src目录),如下图:
  • 导入已有的Maven项目,项目运行不了(jar没有下载完全)
    此时是因为maven的环境被破坏了,导致Maven基础运行环境不全,无法创建Maven项目,或者无法下载所需要的jar包。解决方法:
(1)在项目的pom文件中敲一个空白行,再保存文件,目的是让maven检测到pom文件发生了变化,再根据pom文件中的配置,到本地仓库中寻找对应的jar包,如果没有相应的jar包,maven会重新下载。
(2)如果上面的方式不行,可以尝试在项目上,右键---> Maven ---> Update Project...,强制更新项目,此时maven也会检查pom文件,在本地仓库中有没有相应的jar包。
(3)如果上面的方式仍然没有解决问题,检查当前网络环境是否能连接上所配置的远程仓库。(比如在家里使用外网,无法连接达内的远程仓库,或者使用手机热点网络无法连接阿里云的远程仓库等)
	a) 在达内教室,连接的是达内内网:在settings.xml文件中配置连接达内的远程仓库
	b) 在家里,用的是外网(但不是手机热点):可以不配置,默认连接中央仓库,或者 在settings.xml文件中配置连接阿里云仓库
	c) 用的是手机热点网络:不可以配置连接达内远程仓库或者阿里云仓库,连不上!!
(4)如果网络能够连接上所配置的远程仓库,到本地仓库的目录下,将本地仓库中所有的目录都删除,删除时,eclipse正在使用本地仓库中的资源文件,所以会阻止删除,此时将eclipse关闭,再将本地仓库中的所有目录删除,重启eclipse。
(5)启动eclipse后,再将上面的第(1)步和第(2)步再做一遍!
(6)如果还是不行,就使用老师下发的本地仓库替换你的本地仓库!
**问题描述2:**每天第一次打开Eclipse发现之前创建的Maven工程报错(比如项目上有叉号或者叹号,但项目之前是OK的),解决方法:在菜单栏中找到 Project —> Clean…

java 第三方依赖包的执行 java依赖包是什么_远程仓库_48


或者是:在报错的项目上鼠标右键 --> Maven --> Update Project:


java 第三方依赖包的执行 java依赖包是什么_maven_49

找不到jar包问题

在项目中通过坐标引入了jar包(或者插件),并且本地仓库中也存在对应的jar包,但是项目还是报错,提示内容说找不到。
解决方法:如果引入的jar包,在本地仓库中存在,但是还是提示找不到,可以将本地仓库中jar包或插件的所在目录整个删除(如果删除时提示文件正在被占用,关闭eclipse再删除即可),重新保存pom.xml文件,并更新工程,让maven再次下载上面的jar包即可!
未下载完全示例:

java 第三方依赖包的执行 java依赖包是什么_java_50


正常下载完全示例:


java 第三方依赖包的执行 java依赖包是什么_远程仓库_51

Maven的依赖范围

下面添加了一个 jsp-api 的依赖,maven就会去下载 jsp-api 的jar包及它依赖的一些jar包。

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.0</version>
  <scope>provided</scope>
</dependency>

依赖配置中有一个scope之前没讲过,它就是依赖范围
1、什么是依赖范围:就是指定你这个jar包在哪个阶段时才有效。

  • compile - 编译依赖范围。默认的范围,可以不填,表示在所有过程中都有效,如编译期、测试过程中、运行期间等。
  • provided - 已提供依赖范围。这个范围表示只提供编译和测试阶段有效,运行期间不需要,像tomcat等容器本身已经提供的 servlet-api、jsp-api 等依赖。
  • runtime - 运行时依赖范围。这个范围表示只有在运行和测试期间才有效,编译期间不需要,像连接数据库的jdbc驱动程序等。
  • test - 测试依赖范围。这个范围只有测试阶段有效,编译和运行不需要,像单元测试提供的junit包。
  • system - 系统依赖范围。这个范围表示不依赖本地仓库,jar在其他的目录,需要通过systemPath指定路径,这个不建议使用。
  • import - 引用依赖范围。Maven2.0.9之后新增的范围,只能用在中,并且导入的type为pom类型的父工程配置,一般用来解决多继承问题。
    2、什么是依赖传递: 依赖的传递前面讲过通过继承和聚合的方式可以达到,通过继承的方式可以轻松的从父项目继承过来,通过聚合的方式也可以间接的传递过来。
    继承:A继承B,A就可以继承B的dependencies依赖。 聚合:A依赖C,C依赖D,那么A就要依赖D自然也就获取了D的依赖。
    3、什么是依赖排除: 在依赖传递过程中,如 A 依赖 B、S2.0,B 依赖C、S1.0,这样A就有了S1.0和S2.0两个依赖,这样某些情况下会造成冲突需要手动把B间接传递过来的依赖排除掉,就是不依赖B带过来的S1.0的包。
<dependency>
  <groupId>org.testgroupId>
  <artifactId>B</artifactId>
  <version>1.0</version>
  <!-- 排除B传递过来的S依赖 -->
  <exclusions>
    <exclusion>
      <groupId>com.test</groupId>
      <artifactId>S</artifactId>
      </exclusion>
    </exclusions>
</dependency>

或者直接设置 排除所有间接依赖:

<dependency>
	<groupId>org.testgroupId>
	<artifactId>B</artifactId>
	<version>1.0</version>
  <!-- 排除B传递过来的所有依赖 -->
	<exclusions>
		<exclusion>
			<groupId>*</groupId>
			<artifactId>*</artifactId>
		</exclusion>
	</exclusions>
</dependency>

总结:
1、掌握Maven的下载、安装、配置
(1)配置本地仓库的位置
(2)配置远程仓库:如果不配置,默认连接中央仓库(需要外网);也可以配置连接达内的远程仓库(在达内,有达内内网);或者配置连接阿里云的远程仓库(需要外网,并且不可以使用手机热点);
(3)配置JDK版本(Maven创建的工程JDK版本默认是JDK1.5,可以通过配置修改JDK的版本)
(4)将Maven配置到Eclipse中(Eclipse整合Maven)
2、重点掌握:通过Maven创建Java项目、Web项目;导入已有的Maven项目
3、了解Maven的三种仓库(本地仓库、远程仓库、中央仓库)
4、重点掌握:为Maven项目添加依赖(方式一(要求本地仓库中必须有这个jar文件)、方式二)