现在的位置: 首页 > 综合 > 正文

Maven 基础

2013年08月01日 ⁄ 综合 ⁄ 共 5233字 ⁄ 字号 评论关闭

前言

Maven是一个项目管理工具,它包含了一个项目对象模型(POM),一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑。

         我们可以利用Maven构建项目(编译、测试、打包、分发),还可以生成报告,生成web站点,并且帮助推动工作团队成员间的交流。

约定优于配置是一个简单的概念。系统,类库,框架应该假设合理的默认值,而非要求提供不必要的配置。

 

(1)、Maven  安装

a、去apache 网站上下载:

       http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.0.3-bin.zip,后解压缩到D盘目录

b、设置环境变量

path = D:/maven3/bin

c、打开命令行,键入mvn –v

 

(2)、mvn 命令

mvn dependency:sources     下载依赖包的源代码
mvn clean                  清空生成的文件
mvn clean compile          编译
mvn test                   编译并测试
mvn site                   生成项目相关信息的网站
mvn archetype:create       创建 Maven 项目
mvn package                根据事先指定的格式(比如jar) 进行打包
mvn install                在本地 Repository 中安装 jar
mvn deploy                 在集成或发布环境,将包发布到远程代码库
mvn package -Dmaven.test.skip=true  跳过单元测试打包
mvn package -DdownloadSource=true   下载jar包源码
mvn package -DdownloadJavadocs=true 下载javadoc
mvn test -Dtest=Random*Test  以Random开头,Test结尾的测试类
mvn test -Dtest=ATest,BTest  用逗号分隔指定多个测试用例
mvn eclipse:eclipse 在此项目根目录下就会多了两个文件:.classpath 和.project。

mvn test   需要添加junit 的依赖

       <dependency>

              <groupId>junit</groupId>

              <artifactId>junit</artifactId>

              <version>4.7</version>

              <scope>test</scope>

       </dependency>

test 的scope元素,scope表示依赖范围,默认为compile,若依赖范围为test 则表示该依赖只对测试有效。

 

(3)、mvn 目录介绍

       Bin

       Boot

       Conf :settting.xml,这个配置文件非常重要,一般我们复制一个setting.xml 文件到~/.m2/目录下,~表示用户目录。settting.xml用于配置一些全局性的东西,比如仓库,镜像

       Lib

 

(4)~/.m2 介绍

运行mvn help:system 这个命令的目的是执行了一个任务,比如mvn help:plugin 包括pom 文件和jar 文件。这些文件都被下载到本地仓库中。在C:/Documents and Settings/chenll/.m2/repository/org/apache/maven/plugins/maven-help-plugin下就可以看到下载的maven-help-plugin-2.1.1.jar。

 

(5)、在eclipse中安装Maven插件(m2eclipse)

在eclipse 菜单中选择Help.然后选择 Install New Software。。。弹出一个对话框,在对话框中双击Add 按钮输入路径http://m2eclipse.sonatype.org/sites/m2e。单击OK 。eclipse会下载安装点上的资源信息。等资源载入以后。点击next,eclipse 会自动计算模块间依赖。

(6)、maven 的生命周期

Maven命令:clean 、compile、test、package、install、site等,这些都对应着Maven生命周期的一个阶段(phase)。

      
Maven
有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:

·        Clean Lifecycle在进行真正的构建之前进行一些清理工作。

·        Default Lifecycle构建的核心部分,编译,测试,打包,部署等等。

·        Site Lifecycle生成项目报告,站点,发布站点。

 

(7)、仓库

在maven 项目中任何一个构件的方式都是完全相同的,maven 可以在某个位置统一存储所有maven项目共享的构件,比如log4j-1.2.jar包几乎在每个项目中都有。Maven项目不在将各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候(比如,在编译项目的时候需要将依赖加入到classapath中),Maven 会自动根据坐标找到仓库中的构件。

坐标格式:groupid/artifactid/version/artifactid-version.packaging。

 

(8)、仓库的分类

仓库可以分为两大类,本地仓库和远程仓库。当maven根据坐标寻找构件的时候,首先在本地仓库查找,如果本地仓库存在则直接使用,如果本地仓库不存在,或者查看是否有更新的版本,maven 则回去远程仓库查看,发现以后下载到本地仓库使用,如果都没有则会报错。私服是一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其它,项目使用。

1)、本地仓库。每个用户在自己的目录下都有一个路径名为.m2/repository/的仓库目录。如果用户需要定义自己的目录,需要编辑~/.m2/setting.xml 设置localRepository 元素的值

<setting>

       <localRepository>d:/java/repository/</localRepository>

</setting>

2)、中央库。Maven 必须知道至少一个可用的远程仓库,才能在执行Maven 命令的时候下载到需要的构件,(http://repo1.maven.org/maven2)这个中央库几乎包含了世界上大部分流行开源框架项目构件。

3)、私服。私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,当maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载。

缓存在私服上之后,再为Maven 的下载请求提供服务。

 

(9)、依赖的配置

       <dependencies>

       <dependency>

              <groupid>springFramework</groupid>

              <artifactid>spring-core</artifactid>

              <version>1.0.1</version>

              <type>pom</type>

              <scope></scope>

              <optional></optional>

</dependency>

</dependencies>

 

Groupid:定义maven 项目隶属的实际项目。比如springFramework

Artifactid:定义实际项目中的一个模块。比如spring-core,spring-context

Version:版本号。2.0.0

Packageing:打包方式,.jar,.war。

Classifier:该元素用来帮组定义构件输出的一些附属构件。

其中groupid,artifactid,version 是必须定义的,packaging 是可选的,默认为jar.

 

 (10)、通过命令创建一个简单的Maven项目

进入工程根路径 D:\Workspace 输入命令:mvn archetype:create -DgroupId=com.mapbar.tools -DartifactId=MidMifCheck -DpackageName=com.mapbar.tools -Dversion=release-1.0.1-20120705。(创建web工程:D:\workspace>mvn
archetype:create -DgroupId=com.mapbar.jettyDemo -DartifactId=jettyDemo -DarchetypeArtifactId=maven-archetype-webapp)。

这样在Workspace目录下创建了一个maven 工程MidMifCheck,并且自动生成了pom.xml。

然后执行mvn eclipse:eclipse生成ecllipse项目文件(主要是生产.project和.classpath文件),然后导入到eclipse.

mvn  eclipse:clean -U eclipse:eclipse  -DdownloadSources=true  下载所有关联的jar包及source文件。

 

(11)、Nexus 创建私服

       1)、下载Nexus :http://nexus.sonatype.org/downloads/。

       Nexus 是典型的java Web应用,有两种安装包,一种是包含jetty容器的Bundle包,另一种是不包含web容器的war包。

Nexus-webapp/:目录包含了Nexus 运行所需要的文件、如启动脚本、依赖jar包

Sonatype-work/:该目录包含Nexus生成的配置文件、日志文件、仓库文件。

在window操作系统,用户需要进入nexus-webpp/bin/jsw/windows-x86-32/子目录,然后直接运行nexus.bat 启动Nexus.

 

2)、打开http://localhost:8081/nexus/

就能看到Nexus 的界面。默认的登录用户是admin/admin123。

 

3)、创建仓库

仓库分四种类型:group(仓库组)、hosted(宿主)、proxy(代理)、virtual(虚拟)。

Maven 可以直接从宿主仓库下载构件,maven也可以从代理仓库下载构件,而代理仓库会间接从远程仓库下载并缓存构件。在Repositories 界面创建对应的仓库后在sonatype-work 目录下会生产一个对应的路径。比如在宿主仓库下创建一个id 为010的仓库D:/nexus1.9/sonatype-work/nexus/storage/010。宿主仓库主要是存储组织机构内部的,或者一些无法从公共仓库中获取的第三方构件,供大家下载使用。

Nexus 三个重要的代理仓库:有中央仓库,Apache 快照仓库,和Codehaus 快照仓库。这三个仓库维护了成千上万的构建,全部下载到本地不切实际,所以大部分都维护了一个编录整个内容的Lucene 索引,以便提供快速和有效的搜索。

a、Apache Snapshots:这个仓库包含了来自于Apache软件基金会的快照版本。http://people.apache.org/repo/m2-snapshot-repository

b、Codehaus Snapshots:这个仓库包含了来自于Codehaus的快照版本。 http://snapshots.repository.codehaus.org/

c、Central Maven Repository :这是中央Maven仓库(发布版本)。http://repo1.maven.org/maven2/

 

4)、上传构件,在创建好的仓库中有Artifat  Upload 选项卡。上传构件的方式有两种,第一种是maven构件的,那么可以在GAV Definition 下拉列表中选择From POM ,否则就选GAV Parameters。用户需要为该构件定义一个Maven 坐标。Group,artifact,version。

 

5)、Nexus 权限管理

组织中使用Nexus 有一些安全性的需要,比如只有管理员才能配置nexus,某些团队成员才能部署构件,Nexus 根据需求提供了全面的权限控制特性,能让用户自由的根据需求配置Nexus用户、角色、权限。

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

抱歉!评论已关闭.