MAVEN

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MAVEN相关的知识,希望对你有一定的参考价值。

一、Maven的概述
1、什么是Maven?

Maven是apache下的一个纯Java开发的开源项目
Maven是一个项目管理工具,可以简化项目配置,统一项目结构,使得开发者的工作变得更简单!
使用Maven的主要原因,是Maven可以帮我们下载和管理项目中所需要的依赖(jar包)

二、Maven的下载/安装/配置
1、下载、安装Maven

官方下载地址:http://maven.apache.org/download.cgi
maven是一个绿色软件,解压之后就可以使用。
安装时推荐,安装的路径中不要包含中文和空格

2、配置本地仓库

2.1.什么是本地仓库
    本地仓库就是本地硬盘上的一个目录,这个目录用于存放Maven帮我们下载的所有jar包和插件。
    如果不指定,本地仓库默认是在(windows系统):c:/users/{当前用户}/.m2/repository

2.2.修改本地仓库的默认位置
    找到 {maven的安装目录}/conf/settings.xml文件,在settings文件的55行,添加如下内容:
    <localRepository>d:/javaDevelop/localRepo</localRepository>
    修改完后,以后通过maven下载的所有jar包和插件都会存放在这个位置:
        d:/javaDevelop/localRepo

3、配置远程仓库

3.1.什么是远程仓库
    如果没有配置远程仓库,默认连接中央仓库,也就是maven将会从中央仓库下载jar,再保存到本地仓库中。
    但由于中央仓库面向的是全球用户,所以下载jar包速度较慢!
    远程仓库(镜像仓库、私服): 一般是由公司(或个人)负责搭建并维护,如果配置了远程仓库,maven就会从远程仓库下载所需要的jar包,并保存到本地仓库中。
    
3.2.如何配置远程仓库
    (1)如果是有网络:可以不配置,默认连接中央仓库,也可以配置连接阿里云的仓库,或者连接你们公司自己的远程仓库。
        注意:如果连接阿里云仓库,不可以使用手机热点网络!
    
    配置方法:找到{maven的安装目录}/conf/settings.xml文件,在settings文件的<mirrors>标签内部,通过添加<mirror>标签,可以配置远程仓库。
    
    阿里云的远程仓库配置:
    <mirror>
        <id>nexus-aliyun</id>
        <name>Nexus aliyun</name>
        <mirrorOf>central</mirrorOf>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>

4、配置JDK版本

因为在maven和eclipse整合后,通过eclipse创建的maven项目,其中的JDK版本默认是JDK1.5(太旧)
可以在{maven的安装目录}/conf/settings.xml文件中配置JDK的版本,配置后,以后再创建maven项目,项目中的JDK版本就是我们指定的版本。而不是JDK1.5。
配置方法是:在{maven的安装目录}/conf/settings.xml文件的<profiles>标签内部,添加一个<profile>标签。如下:
<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>

5、整合Maven和Eclipse

如果已经将Maven和Eclipse进行了整合,再修改settings.xml文件,如果想让修改的配置立即生效,可以重启Eclipse。

三、Maven的项目构建
0、通过Maven构建Java项目分为两种方式:

方式一:通过Maven创建简单工程/项目(new simple project)
    (1)通过Maven创建简单的Java工程
    (2)通过Maven创建简单的Web工程
方式二:通过Maven创建模板工程/项目
    (1)通过模板创建Java工程
    (2)通过模板创建Web工程

1、通过Maven创建一个Java项目:CGB-MAVEN-JAVA01

2、通过Maven创建一个Web项目:CGB-MAVEN-WEB01

注意:通过maven创建的Web项目默认缺少 WEB-INF目录,也缺少web.xml文件,解决方法是:
在[Package Explorer]视图窗口中,在Web项目上-->右键-->选择:JavaEE Tools-->选择:Generate Deployment...,webapp目录下就会生成WEB-INF目录和web.xml文件

3、Maven项目的目录结构

CGB-MAVEN-WEB01(maven项目的名字)
    |-- src/main/java(源码目录) -- 用于存放主程序/项目的java源文件
    |-- src/main/resources(源码目录) -- 用于存放主程序所需要的配置文件(.xml/.propertes/.yml等)
    |-- src/test/java(源码目录) -- 用于存放测试的java源文件
    |-- src/test/resources(源码目录) -- 用于存放测试的配置文件
    |-- src/main/webapp -- Web应用的根目录,相当于WebContent目录
            将来可以存放Web资源文件(html/css/js/jsp/图片等)
    |-- src/main/webapp/WEB-INF/web.xml -- Web应用的核心配置文件
    |-- target/classes/ -- 源码目录中的资源文件经过编译后,会输出到classes目录下
    |-- pom.xml -- maven项目的配置文件,如果需要引入jar包、插件,可以在这个文件中进行引入

4、如何导入已有的Maven项目

1) 导入数据库(yonghedb)、表、表记录
2) 导入yonghe项目
注意:在导入项目后,项目上有叉号(x)或者有叹号(!),都是因为maven没有将所有的环境/依赖下载下来。
可以通过如下两个步骤去解决:
1)打开yonghe项目,找到其中的pom.xml文件,在文件中敲一个空白行并保存,让maven重新扫描pom文件,并根据其中的配置下载所需要的依赖;
2)在报错的maven项目上右键--> Maven--> Update Project...,在弹出的窗口中勾选下方的
    []Force Update...
    即勾选强制更新,如果还没有解决,再看第3步!

四、maven的依赖管理
1、如何在Maven项目中引入jar包(依赖)

不需要将jar包复制到当前项目中,而是在pom.xml文件中添加这个jar包对应的坐标,比如,要添加mysql驱动包,只需要在pom文件的根标签(project)内部,添加一个<dependencies>标签,在<dependencies>标签内部添加一个mysql驱动包的坐标即可,如下所示:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.32</version>
</dependency>

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

2、引入到Maven项目中的jar包,存放在哪个位置?

引入到Maven项目中的jar包,存放在本地仓库的指定位置下,这个位置就是【本地仓库位置+当前依赖的坐标】
(前面说过,本地仓库就是本地硬盘上的某一个目录,就是用来存放maven帮我们下载的所有jar包和插件)

3、本地仓库中的jar包是从哪儿来的?

如果没有配置远程仓库,本地仓库中的jar包是maven帮我们从中央仓库下载下来的。
如果配置了阿里云的远程仓库,本地仓库中的jar包是maven帮我们从阿里云仓库下载下来的
1)本地仓库:其实就是本地硬盘上的某一个目录,用于存放maven帮我们下载的所有jar包和插件
    当我们在项目中引入了依赖,就会到本地仓库中根据坐标寻找这个依赖(jar包)
    如果本地仓库中有,则直接引入到项目中使用;
    如果本地仓库中没有,则连接远程仓库(如果配置了),或者连接中央仓库。
2)远程仓库:也叫作镜像仓库或者私服,由公司或个人负责搭建,如果在maven中配置了远程仓库,当本地仓库中没有某一个jar包时,就会连接远程仓库进行下载。远程仓库若没有,则连接中央仓库去下载。
3)中央仓库:由maven团队负责搭建并维护,其中包括了全世界几乎所有的jar包,面向的用户是全球用户,因此在连接中央仓库时,速度会比较慢。

4、如何在pom文件中添加依赖?
4.1.添加依赖的方式一:

如果添加的依赖包在本地仓库中有(比如之前在别的项目中引入过这个依赖包)
添加方法: 打开pom文件,在pom文件中右键--> Maven --> Add dependency,在弹出的窗口中输入要添加的依赖包。
如果本地仓库中没有这个jar包,必然会搜索不到!
如果本地仓库中有这个jar包也搜索不到,解决方法是:打开 Maven Repositories 窗口, 找到 Local Repository,在上面右键 ReBuild Index(即重建索引), 重建索引后再去搜索。

4.1.添加依赖的方式二:

如果添加的依赖包在本地仓库中没有,可以在互联网上进行搜索依赖的坐标,并把坐标复制到pom文件中
http://mvnrepository.com
http://maven.ityuan.com

五、maven的常见问题
1、Maven的本地库支持复制

如果因为网络问题导致无法通过maven下载所需要的依赖,可以将别的电脑上、已经下载好的本地库,复制到我们的本地库中。

2、如果通过Maven创建的工程目录结构不完整,或者后期在引入Jar包时,jar引入失败,可以参考如下方法进行解决:

1)确保当前网络环境是否能连接上所配置的远程仓库,接着进行第2步。(若不在达内教室,是无法连接达内的远程仓库;又或者使用手机热点网络将无法连接阿里云的远程仓库等)
2)在项目的pom文件中敲一个空白行,再保存文件。(目的是让maven检测到pom文件发生了变化,再根据pom文件中的配置,到本地仓库中寻找对应的jar包,如果没有相应的jar包,maven会重新下载)
3)接着在项目上,右键---> Maven ---> Update Project...,在弹出的窗口中勾选下方的 "[]Force Update...",即强制更新项目,此时maven也会检查pom文件,下载没有引入的相关依赖。
4)如果以上操作还是不行,到本地仓库的目录下,将本地仓库中所有的目录都删除,删除时,由于eclipse正在使用本地仓库中的资源文件,所以会阻止删除,此时将eclipse关闭,再将本地仓库中的所有目录删除,重启eclipse。
5)启动eclipse后,再将上面的第(2)步和第(3)步再做一遍!

以上是关于MAVEN的主要内容,如果未能解决你的问题,请参考以下文章

Spring+SpringMVC+MyBatis+Maven框架整合

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段

如何在 Apache Felix maven-bundle-plugin 中设置 Provide-Capability 标头?

Maven FTP部署:无法创建目录

如何从詹金斯访问maven属性?

向小军 “小黑” 正式加入 Maven Skateboards