码迷,mamicode.com
首页 > 其他好文 > 详细

Maven的安装以及使用

时间:2017-09-20 14:43:54      阅读:365      评论:0      收藏:0      [点我收藏+]

标签:机制   home   第三方   ups   alt   右上角   加载   细节   setting   

1、  maven的介绍

2、  maven的安装配置

3、  安装maven插件m2e

4、  创建maven工程

5、  Maven的核心概念

a)         坐标

b)         依赖管理

c)         生命周期

d)         插件

e)         继承

f)          聚合

6、  maven的仓库管理以及私服(nexus)的搭建

一、Maven简介以及使用背景

  why:

1、都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行?

2、为什么在我的机器上可以正常打包,而配置管理员却打不出来?

3、项目组加入了新的人员,我要给他说明编译环境如何设置,但是让我挠头的是,有些细节我也记不清楚了。

4、我的项目依赖一些jar包,我应该把他们放哪里?放源码库里?

5、这是我开发的第二个项目,还是需要上面的那些jar包,再把它们复制到我当前项目的svn库里吧

6、现在是第三次,再复制一次吧    ----- 这样真的好吗?

7、我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有五个项目组在使用它了,今天我发现了一个bug,并修正了它,我会把jar包通过邮件发给其他项目组

-----这不是一个好的分发机制,太多的环节可能导致出现bug

项目进入测试阶段,每天都要向测试服务器部署一版。每次都手动部署,太麻烦了。

  what:

Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进管理的工具。

Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上

Maven主要有两大功能:管理依赖、项目构建。

依赖指的就是jar包

 

二、Maven安装以及简单命令(有的低版本没有内置Maven或者Maven版本过低就要自己安装喽)

 1、安装以及配置

  ①:去官网下载最新版本的Maven

  ②:解压到你的目录里,建议放在jdk和ide放在一块,便于管理

  ③:配置MAVEN_HOME和path(和JDK配置一样,我就不解释了)

  ④:命令行输入“mvn -v”,如果有版本等信息输出说明装好了

 2、命令

  -compile  编译,生成字节码文件,默认生成target目录

  -test    测试,生成测试结果信息,测试Test里面的断言是否正确,如果没有事先编译该命令就先执行 -compile

  -clean   清空编译以及测试生成的字节码文件

  -package  打包,默认打成jar包

  -install   把jar包上传至本地仓库(默认在userhome/.m2 文件夹下,可以在这配置一个用户配置信息)

  -deploy   如果配置了私服信息,就可以上传至私服(具体配置往后看)

 

三、安装m2e插件(高版本的自带有)

  安装地址: http://download.eclipse.org/technology/m2e/releases

  之后把出来的插件打对勾装上,然后重启eclipse就好了。

  如果有不会的就参考百度:https://jingyan.baidu.com/article/77b8dc7f9e0c1a6174eab6d6.html

注意:有可能会遇到创建项目提示你某个jar包找不到无法加载。

  原因:网络不好导致某些jar包下载失败。

  解决办法:删除~/.m2/org/apache/maven/目录下的所有文件,然后找个网络好点的时间,打开myeclipse他会自动更新的。

       有人说只要删除里面的plugings目录就好,但是本人亲测不太管用,还是上面全部删掉搞定。

 

四:创建项目

创建Maven project

技术分享

创建一个简单的Maven模版

技术分享

打包方式:如果一般项目或者maven model就用jar

  如果是web项目或者web的控制层就用war,记得自己手动添加jsp页面和web.xml配置文件

  如果是聚合项目的父工程就用pom,方便管理jar包和模块化开发

技术分享

最后配置pom.xml,需要什么jar就导入什么

 

五、Maven的核心概念

1 坐标, Maven坐标主要组成

groupId:定义当前Maven组织名称

artifactId:定义实际项目名称

version:定义当前项目的当前版本

2 依赖管理

2.1   依赖范围

技术分享

其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效

2.test:测试依赖范围。只对于测试classpath有效

3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api

4.runtime:运行时提供。例如:jdbc驱动

2.2   依赖传递

技术分享

左边第一列表示第一直接依赖范围

上面第一行表示第二直接依赖范围

中间的交叉单元格表示传递性依赖范围。

总结:

  • 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
  • 当第二直接依赖的范围是test的时候,依赖不会得以传递。
  • 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
  • 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;

 

 

2.3   依赖冲突----就近原则和覆盖原则

在maven中存在两种冲突方式:一种是跨pom文件的冲突,一致是同一个pom文件中的冲突。

跨pom:就近选择本pom

同pom:覆盖选择最后的pom配置

2.4   可选依赖

Optional标签标示该依赖是否可选,默认是false。可以理解为,如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。

 技术分享

2.5   排除依赖

Exclusions标签可以排除依赖

 技术分享

3      生命周期

Maven有三个生命周期:clean生命周期、default生命周期、site生命周期

生命周期可以理解为项目构建的步骤集合。

生命周期是由多个阶段(Phase)组成。每个阶段都是一个完整的功能,比如mvn clean中的clean就是一个阶段

3.1   Clean生命周期

pre-clean 执行一些需要在clean之前完成的工作

clean 移除所有上一次构建生成的文件

post-clean 执行一些需要在clean之后立刻完成的工作

3.2   Default生命周期(重点)

validate

generate-sources

process-sources

generate-resources

process-resources 复制并处理资源文件,至目标目录,准备打包。

compile 编译项目的源代码。

process-classes

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources 复制并处理资源文件,至目标测试目录。

test-compile 编译测试源代码。

process-test-classes

test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。

prepare-package

package 接受编译好的代码,打包成可发布的格式,如 JAR 。

pre-integration-test

integration-test

post-integration-test

verify

install 将包安装至本地仓库,以让其它项目依赖。

deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

在maven中,只要在同一个生命周期,你执行后面的阶段,那么前面的阶段也会被执行,而且不需要额外去输入前面的阶段,这样大大减轻了程序员的工作。

3.3   Site生命周期(忽略吧)

pre-site 执行一些需要在生成站点文档之前完成的工作

site 生成项目的站点文档

post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy 将生成的站点文档部署到特定的服务器上

4      插件

插件(plugin),每个插件都能实现一个阶段的功能。Maven的核心是生命周期,但是生命周期相当于主要指定了maven命令执行的流程顺序,而没有真正实现流程的功能,功能是有插件来实现的。

1.4.1   编译插件--指定该项目运行时使用的jre版本号,前提目标机器必须有该jre

 技术分享

target:jre版本。 encoding:编译使用的编码方式

4.2   Tomcat插件

如果使用maven的tomcat插件的话,那么本地则不需要安装tomcat,可以直接部署运行,方便测试

4.2.1        创建maven的web工程

前四步省略,记得打成war包

第五步:创建WEB-INF及web.xml文件,从别处拷过来

第六步:创建index.jsp文件或者使用框架。。。

4.2.2    使用tomcat插件运行web工程

 可以使用默认的tomcat版本启动,但是推荐自己配置版本

技术分享

使用tomcat7来运行web工程,它的命令是:tomcat7:run

 然后浏览器输入:http:localhost/就可以了,即http://ip:$port/$path

1.5      继承在依赖中指定父亲的gav坐标

好处:

  ①:父工程统一依赖jar包

    在父工程中对jar包进行依赖,在子工程中都会继承此依赖。

  ②:父工程统一管理版本号--不推荐,因为子工程还得配置依赖信息,只是少个版本

    dependencyManagement标签管理的依赖,其实没有真正依赖,它只是管理依赖的版本。

  子工程的pom文件:技术分享

  ③:父工程抽取版本号--推荐,方便省事

 技术分享

 1。6    聚合

在真实项目中,一个项目有表现层、业务层、持久层,对于业务层和持久层,它们可以在多个工程中被使用,所以一般会将业务层和持久单独创建为java工程,为其他工程依赖。

例如:

MavenProject:

  根项目:MP--打包pom

MavenModel: 所有父工程都是MP

  持久层:MPDao--打包jar

  业务层:MPService--打包jar

  变现层:MPController--打包war

 

六、Maven仓库以及私服管理

1)什么是Maven仓库?

  用来统一存储所有Maven共享构建的位置就是仓库。根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:groupId/artifactId/version/artifactId-version.packaging

  可以分为:本地仓库,远程仓库(中央仓库:apache的 和 私服:自己的)

2)为什么要使用私服

技术分享

如图,假设没有私服每次下载jar包都要访问中央仓库,如果人多就导致网络阻塞。但是如果都访问局域网的仓库呢????

3)私服的搭建----nexus服务器

为所有来自中央仓库的构建安装提供本地缓存。

下载网站:http://nexus.sonatype.org/,下载新版本这里使用的2.11版本,内置jetty,所以直接运行就可以了

①:解压到jdk同层目录即可,一共俩文件夹

②:配置信息:conf/nexus.properties修改端口号和路径

# Jetty section
application-port=8081        #这里是端口号自己改
application-host=0.0.0.0  #访问地址,改成localhost即可
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus

# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF

③:启动nexus

.\nexus-2.12.0-01\bin\jsw\目录下有好多,根据你操作系统版本自己打开吧

  如果出现报错就是jdk版本太低,推荐1.8

④:nexus管理页面

技术分享

右上角登陆:默认帐号密码--admin/admin123

nexus仓库目录:

技术分享

访问nexus,访问URL: http://localhost:8081/nexus-xxx

nexus仓库组:

技术分享

仓库有4种类型 :

l  group(仓库组):一组仓库的集合

l  hosted(宿主):配置第三方仓库 (包括公司内部私服 )

l  proxy(代理):私服会对中央仓库进行代理,用户连接私服,私服自动去中央仓库下载jar包或者插件

l  virtual(虚拟):兼容Maven1 版本的jar或者插件

 

Nexus的仓库和仓库组介绍:

l  3rd party: 一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构建

l  Apache Snapshots: 一个策略为Snapshot的代理仓库,用来代理Apache Maven仓库的快照版本构建

l  Central: 代理Maven中央仓库

l  Central M1 shadow: 代理Maven1 版本 中央仓库

l  Codehaus Snapshots: 一个策略为Snapshot的代理仓库,用来代理Codehaus Maven仓库的快照版本构件

l  Releases: 一个策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件

l  Snapshots: 一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件

Public Repositories:该仓库组将上述所有策略为Release的仓库聚合并通过一致的地址提供服务

配置默认可以从远程仓库下载索引文件:

技术分享

 

 ⑤:配置所有jar都从私服下载

在本地仓库的setting.xml中配置如下:

<mirrors>

          <mirror>

                    <!--此处配置所有的构建均从私有仓库中下载 *代表所有,也可以写central -->

                    <id>nexus</id>

                    <mirrorOf>*</mirrorOf>

                    <url>http://localhost:8080/nexus-2.7.0-06/content/groups/public/</url>

          </mirror>

 </mirrors>

 

 

 

 

 

 

 

 

 

⑥:往私服上传部署

 第一步:Nexus的访问权限控制

在本地仓库的setting.xml中配置如下:

         <server>

                  <id>releases</id>

                   <username>admin</username>

                   <password>admin123</password>

         </server>

         <server>

                   <id>snapshots</id>

                   <username>admin</username>

                   <password>admin123</password>

         </server>

 

 

 

 

 

 

 

第二步:配置pom文件

在需要构建的项目中修改pom文件

<distributionManagement>

       <repository>

           <id>releases</id>

           <name>Internal Releases</name>

           <url>http://localhost:8080/nexus-2.7.0-06/content/repositories/releases/</url>

       </repository>

       <snapshotRepository>

           <id>snapshots</id>

           <name>Internal Snapshots</name>

           <url>http://localhost:8080/nexus-2.7.0-06/content/repositories/snapshots/</url>

       </snapshotRepository>

    </distributionManagement>

 

 

 

 

 

 

 

 

 

第三步:执行maven的deploy命令

 

Maven的安装以及使用

标签:机制   home   第三方   ups   alt   右上角   加载   细节   setting   

原文地址:http://www.cnblogs.com/webyyq/p/7560788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!