重新认识Maven

PS:第一次接触maven大约是两年前吧,音乐记得之前都是人工寻找并下载很多jar,放在项目的lib中(表示太年轻,没有接触过Ant或者其他类似的工具,就不找别人写的比较了)。懒人永远有着自己的小聪明,我都是搭建完一个项目,保存最原始的项目框架作为备份,以便于再次搭建项目的时候寻找jar,即使现在使用maven我也保留了这个习惯,因为可以减少很多重复的配置。缺点就是慢慢的会忘记都需要配置什么,每次都是找以前的。

从三个方向重新认识maven:

  1.     maven是什么;
  2.     maven的配置;
  3.     maven结合开发工具的使用;

1.maven是什么:

  这个问题官网上有很直接的回答。http://maven.apache.org/what-is-maven.html(官网介绍),对于纯英文的资料两种处理方式,第一种:寻找快速开始(Quick start)等快速找到代码的部分。基本上就是教程了;另一种就是自己慢慢看资料结合一些翻译工具,硬着头皮慢慢来。

  简单的说明一下:

    maven是一个用来创建和管理基本java项目的工具。直白的说,就是创建和管理jar包的。方便引入第三方包。为什么说方便引入第三方包呢?使用maven创建的项目都会有一个pom.xml文件,只要在这个文件中配置你要引用的jar包就可以了,是很方便。但是我第一次用的时候并没有觉得很方便,因为在配置文件中需要配置一个<dependency><groupId>XXX</groupId><artifactId>YYY</artifactId><version>ZZZ</version></dependency>才算是完成了一个包的引用,问题是我怎么知道XXX,YYY,ZZZ怎么填?还不是要去网上找,一样的麻烦。事实上有专门查pom引入的网站(https://mvnrepository.com/),这个东西在网上很好搜。但是你要下载的jar,因为网上的版本太多,变得反而不好找。更重要的问题是,这样能够很好的同一版本,提交和移植项目都变的好简单。相当于每次移植项目的时候,maven在旁边跟你说“没事,第三方的jar包在我这里,我会帮你带着的”。习惯于它并依赖上它。

2.maven的配置

  maven配置很简单,只有三个配置文件:

  1. conf\logging\simplelogger.properties,从文件路径名称能看出来是日志相关的配置(并不常用,可以说基本上不会修改)
  2. conf\toolchains.xml,从文件路径名称可以看出工具链(也不常用,正常情况下可以不用修改)
  3. conf\settings.xml,从文件可以看出这是一个比较全面的配置文件(常用的配置文件)
  4. ${user.home}/.m2/settings.xml,这个配置文件和3是等价的,不同的是,这个是用户级别,3是全局级别。

  关于maven的配置文件详情:

    a.本地仓库配置(默认路径:${user.home}/.m2/repository):<localRepository></localRepository>

    b.是否与用户交互(默认:true):<interactiveMode>true</interactiveMode>

    c.插件组列表(默认:<pluginGroup>org.apache.maven.plugins</pluginGroup>和<pluginGroup>org.codehaus.mojo</pluginGroup>):<pluginGroups></pluginGroups>

        c.1包含:<pluginGroup></pluginGroup>元素

    d.代理配置(默认:无;配置多个下,默认激活第一个使用):<proxies></proxies>

        d.1包含(一个代理):<proxy></proxy>

            d.1.1包含:    <id>optional</id>(不同代理的唯一标识,可通过配置profile id更换使用的代理)

            d.1.2包含:    <active>true</active>(该代理是否激活使用状态)

            d.1.3包含:    <protocol>http</protocol>(代理协议)

            d.1.4包含:    <username>proxyuser</username>(代理认证用户名,在需要认证的时候使用)

            d.1.5包含:    <password>proxypass</password>(代理认证密码,在需要恩正的时候使用)

            d.1.6包含:    <host>proxy.host.net</host>(代理主机名)

            d.1.7包含:    <port>80</port>(代理端口号)

            d.1.8包含:    <nonProxyHosts>local.net|some.host.com</nonProxyHosts> (不被代理的主机名列表,使用|[竖线]分割或使用,[逗号]分割)

    e.服务端相关认证配置:<servers></servers>

        e.1包含(一个服务器,第一种认证方式):<server></server>

            e.1.1包含:    <id>deploymentRepo</id>(使用用户名密码,认证ID)

            e.1.2包含:    <username>repouser</username>(用户名)

            e.1.3包含:    <password>repopwd</password>(密码)

        e.2或者(一个服务器,第二种认证方式):<server></server>

            e.2.1或者:    <id>siteServer</id>(使用私钥和口令,认证ID)

            e.2.2或者:    <privateKey>/path/to/private/key</privateKey>(私钥)

            e.2.3或者:    <passphrase>optional; leave empty if not used.</passphrase>(口令)

    f.镜像列表配置:<mirrors></mirrors>

        f.1包含(一个镜像):<mirror></mirror>

            f.1.1包含:    <id>mirrorId</id>(不同镜像的唯一标识)

            f.1.2包含:    <mirrorOf>repositoryId</mirrorOf>(原始仓库id,即镜像映射的仓库id)

            f.1.3包含:    <name>Human Readable Name for this Mirror.</name>(镜像名称)

            f.1.4包含:    <url>http://my.repository.com/repo/path</url>(连接镜像的URL)

    g.环境参数配置列表:<profiles></profiles>

        g.1包含(一个环境配置):<profile></profile>

            g.1.1包含:    <id>jdk-1.4</id>(环境配置ID)

            g.1.2包含:    <activation></activation>(激活某个对应的组件或配置)

                g.1.2.1包含:    <jdk>1.4</jdk>

            g.1.3包含:    <repositories></repositories>(仓库列表)

                g.1.3.1包含(一个仓库):<repository></repository>

                    g.1.3.1.1包含:    <id>jdk14</id>(远程仓库唯一标识)

                    g.1.3.1.2包含:    <name>Repository for JDK 1.4 builds</name>(远程仓库名称)

                    g.1.3.1.3包含:    <url>http://www.myhost.com/maven/jdk14</url>(远程仓库URL)

                    g.1.3.1.4包含:    <layout>default</layout>(用于定位和排序构件的仓库布局类型:default(默认)或者legacy(遗留))

                    g.1.3.1.5包含:    <snapshotPolicy>always</snapshotPolicy>(快照策略)

    h.激活参数配置列表:<activeProfiles></activeProfiles>

        h.1包含(一个激活列表):    <activeProfile>alwaysActiveProfile</activeProfile>(要激活的配置)

相关概念:

    仓库的概念:

        本地仓库:maven在本地存储构件的地方(本地存放jar的目录)

        远程仓库:

            私服:局域网内的远程仓库。

            中央仓库:公网上的远程仓库。

            其他公共仓库:基本同中央仓库。

    本地仓库、私服、代理、中央仓库、镜像服务器之间的关系:

        本地仓库是用来服务我们本地maven项目的,里面存储了相关的jar,当一个maven项目需要一个jar包时会通过项目pom文件中配置的groupId和artifactId在本地仓库中寻找,有则调用。没有则去远程仓库下载。

        远程仓库的私服是最优先的,如果配置了私服,则会优先在私服中下载,如果私服中存在,则下载;如果没有,再请求中央仓库。

        为什么要配置私服,一般我们不会直接连接中央仓库,有以下几点原因:

            a.节省外网带宽

            b.加速Maven的构建(默认中央仓库服务器在国外)

            c.部署第三方构件

            d.提高稳定行,增强控制

        所以我们可以配置镜像,在网上可以找到一些国内的中央仓库的镜像,配置镜像,同样可以下载到所需要的jar包。

        这其中的代理配置,类似于网络代理。我们凡是要访问网络资源,都可以通过配置代理去访问,这个好处有以下几点:

            a.有时候不能直接访问,使用代理服务器访问

            b.隐藏IP地址等

        一个简单的比喻:

            比如我们今天要用电脑打游戏(一个项目),需要一台mac(jar包),我们先在家(本地仓库)里找,有就开始玩(引用编译);没有我们需要去自己的店(私服)里去拿。

            自己的店(私服)里有,则拿回家(本地仓库),就可以开始玩了(引用编译);店(私服)里没有,我们需要去厂家(中央仓库)进货。但我们一般不会直接找厂家(中央仓库),可能时因为自己的店(私服)太小或者厂家(中央仓库)在国外,那我们就找国内的代理商(镜像服务器)。

            代理商(镜像镜像服务器)有,我们就进会自己的店(私服),然后拿回家(本地仓库),开始玩(引用编译),如果没有,代理商(镜像服务器)会去找。

            那么我们在找代理商(镜像服务器)或者厂家(中央仓库)的时候可以找个中间人或者代购(代理),中间人或者代购(代理)帮我们去找我们想要的mac(jar包),代理商(镜像服务器)和厂家(中央仓库)就不会找到是谁买的mac(jar包)。

3.maven结合开发工具的使用

  基本的环境变量的配置:

    【我的电脑】[右击]->【属性】->【高级系统设置】->【环境变量】

    分别配置"M2_HOME"和"Path"

    M2_HOME:(maven的安装路径)

    Path:(%M2_HOME%\bin)【注意:不要新建,在原Path后添加,注意分号间隔】

  测试maven配置:

    控制台输入“mvn -v”,显示版本号及相关,则配置正常(如下图)

  在IDEA上使用maven

      file->Settings->Build,Execution,Deployment->Build Tools->Maven,如下图

  在eclipse上使用maven

      Window->Preferences->Maven->User Settings->Installations->Add(右侧),如下图

      Window->Preferences->Maven->User Settings->User Settings,如下图

以上整体的将maven相关总结了一下,如有错误,敬请指出。

猜你喜欢

转载自www.cnblogs.com/ben-mario/p/9102274.html