Maven@ITIL

 

 

 

 

Maven@ITIL

 

 

 

 

 

 

扫描二维码关注公众号,回复: 1155426 查看本文章

 

 

liuzhankun@oped

2010-10-17


 

1 基本概念

1.1 Maven是什么

         Maven是一个项目管理工具,包含一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和一些插件。(别被这个概念吓跑了,我们用Maven多用在依赖管理、构建和发布项目)。

 

1.2 约定优于配置

         系统、框架应该设定合理的默认值,而非要求提供不必要的配置。比如源代码、资源文件的存放路径等。优点:使用通用的一组约定,简化配置;提供了构建软件的一般性接口,用户能很容易的对一个陌生项目进行构建。缺点:用户有一种被强迫的感觉。

1.3 概念模型

         项目概念模型包含如下特征:

1.         依赖管理
项目是由一个包含组标识符(groupId)、构件标识符(artifactId)、版本(version)的唯一的坐标定义的。项目间可以使用这些坐标来声明依赖。

2.         远程仓库
和项目依赖相关的,我们可以使用定义在项目对象模型(POM)中的坐标来创建Maven构件的仓库。

3.         全局性构件逻辑的重用
插件的使用和配置和项目对象模型(POM=Project Object Model)一起工作,没有被设计成需要单独的配置文件。

4.         工具可移植性
EclipseNetBeansInteliJ等开发工具都有一个共同的地方来找到项目信息。

5.         便于查找个过滤构件
Nexus这样的工具允许你是用存储在POM中的信息对仓库中的内容进行索引和搜索。

 

1.4 MavenAnt的区别

         Ant是是一个被广泛使用的构建工具,现在还有很多人在Maven的构建中使用Ant构建脚本。但Maven不仅仅是一个工具,而是一个平台。Maven的核心财产时声明性构建、依赖管理、仓库管理、基于插件的高度和重用。

在构建这个层面,Ant的特点:

1.       Ant没有约定一个项目的目录结构,你必须告诉Ant去哪里找源代码、哪里放置输出。

2.       Ant是程序化的(基于XML进行编程),你必须明确的告诉Ant做什么、什么时候做(比如:先编译,然后复制,然后压缩)。

3.       Ant没有生命周期,你必须手动为每个目标附上一个任务序列。

Maven的特点

1.       Maven拥有约定,他知道你的源代码在哪里,也知道编译后的字节码放到哪里(target/classes)。

2.       Maven是声明式的,只需要创建一个pom.xml文件,然后向源代码放到默认目录,Maven会自动帮你做其他事。

3.         Maven有一个声明周期,当你执行Maven install的时候,Maven会自动执行一系列有序的步骤,直到达到你指定的目标。

1.5 SnapshotRelease的区别

         Maven的依赖管理是基于版本管理的,对于发布状态的构件,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,Maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解决了,而Maven已经为我们准备好了这一切。

         我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。

         比如开发状态的版本定义为Snapshot,如:1.0.0-SNAPSHOT,待版本稳定后,为这个项目打一个tag,这个tag的版本修改为Release1.0.0,然后发布到本地仓库,同时将原来trunk下面的项目版本升一个,如:1.0.1-SNAPSHOT

 

2 Maven的安装

         Windows下,先到http://maven.apache.org/download.html下载个最新的字节码zip文件,保存到本地后解压缩,然后将Mavenbin目录追加到环境变量PATH中,只要在命令行下输入:mvn -v,能正确输出Maven的版本号,则表明安装成功。

         Mavenconf/目录下包含一个全局的settings.xml文件,该文件用于自定义你机器上的Maven的一些行为。如果你需要自定义Maven,通常做法是复写~/.m2目录下的settings.xml~表示用户目录,Windows下这个目录在系统盘下的用户目录)。

         ~/.m2/repository,该目录是你本地的仓库,当你从远程Maven仓库中下载依赖的时候,会在本地仓库存储这个依赖的一个副本。这个目录可以在settings.xml中修改。

3 Eclipse插件

         Eclipse中使用Maven插件能方便的创建和管理Maven项目。Maven插件的安装和其他插件的安装过程是一样的。

         点击菜单:Help à Software Updates à Find and Install…,然后选择“Search for new features to install 如下图所示。

 

         点击“New Remote Site…”,弹出的对话框中输入站点名称和URL,如NamemavenURLhttp://m2eclipse.sonatype.org/sites/xxxx(请在浏览器中打开http://m2eclipse.sonatype.org/sites,选择一个VERSION进行下载),然后点击“OK”,Eclipse会自动进行插件的下载和安装,如下图所示。

 

         安装完后重新启动Eclipse后就能使用Maven插件了。如果安装成功,在Window->Preferences就能看到,如下图:

4 创建项目

         通过EclipseMaven插件可以很容易的完成Maven项目的创建,下面将以创建itil-problem-core项目为例。

         点击菜单File->New->Other,然后选择Maven Project,然后点击“Next”,然后选择存储路径。如下图所示。

 

         在“Select an Archetype”选择默认的默认的设置就可以了,即为“maven-archetype-quickstart”,如果创建的是web项目,则可以选择“maven-archetype-webapp”。

         然后点击“Next”。然后输入Group Id(如:com.baidu.noah.itilArtifact ID(如:itil-problem-core)和Version(如:1.0.0)等信息,Package信息可以随意填写,他会为你创建一个默认的包。点击确认就完成了Maven项目的创建。如下图:

 

编辑pom.xml,将当前项目的Parent Project指定为Noah-Itil,需要在<project>节点下添加如下内容:

    <parent>

       <artifactId>itil</artifactId>

       <groupId>com.baidu.noah.itil</groupId>

       <version>1.0.0</version>

    </parent>

 

5 项目的提交

         通过EclipseSVN插件可以将创建的项目提交到SVN服务器上。

         首选,选中项目,点击鼠标右键,选择:Team à Share Project…,如下图所示。

然后选择资源库类型为SVN,点击“Next”。

如果有对应的资源库路径则选择相应的一个,否则新创建一个。如果新创建,输入的URL可为:https://svn.baidu.com/op/oped/noah/trunk/itil/,请勿输入包括项目名称的路径,因为后面的步骤会把项目名称作为路径追加到URL中。如下图所示。

然后点击“Next”选择项目存储的最终路径,也可以重新调整路径。点击“Next”输入提交的注释信息,然后点击“Finish”完成项目的提交,如下图所示。

 

在项目提交时,有些项目的配置文件请勿提交到svn,因为这些配置信息只和你本机的IDE相关。请勿提交的内容有:

1.         .classpath 文件

2.         .project 文件

3.         .settings 目录

4.         target 目录

 

6 项目的导出

         如果SVN中已经有了一个Maven项目,我们需要从SVN中把它导出为本地的Maven项目。步骤如下。

         点击菜单:File à New à Other,选择“Checkout Maven Project from SCM”。在SCM路径上选择svnURL中输入项目的地址,如:https://svn.baidu.com/op/oped/noah/trunk/itil/itil-problem-core/,点击“Finish”完成项目的导出。如下图所示。

7 仓库管理器

7.1 本地仓库的优点

         Maven是有一个中央资源库(http://repo1.maven.org/maven2/),我们常用的资源基本上都涵盖了,索引文件有70M+。但还是建议各个企业建立自己的资源考虑,主要是基于下面几个原因:

1.         加速构建

可是直接使用本地仓库缓存的资源,不需要浪费时间向中央仓库请求。

2.         节省你的宽带
本地仓库可以缓存你常用的资源,不需要每次都向中央仓库请求下载所需的资源。

3.         节省中央Maven仓库的带宽
一种公德心,利己利人。

4.         可预见性和稳定性
网络环境相对独立,不会因为到中央仓库的网络连接问题影响你的构建。

5.         控制和审计
可以控制和监管开发团队中使用的依赖。

6.         能够部署第三方构件
可以把在公共Maven仓库中获取不到的第三方提供的构件部署到自己的仓库中,这样你的企业内部就能使用这些构件。

7.         可以建立内部仓库
这样将企业内部可公用的组件发布到内部仓库中,这样其他团队或项目中就能很简单的使用这些构件。

 

基于上面的原因,我们使用了Sonatype Nexus搭建了内部的Maven仓库。

7.2 如何使用本地仓库

         我的资源的依赖如何才能通过内部仓库进行查找和下载,而不是Maven中央仓库呢?如果你的Maven项目已经指定了他的Parent项目是itil的话,他已经继承了itil中配置的内部仓库的信息。

<repositories>

  <repository>

  <id>Nexus</id>

  <name>Nexus Public Repository</name>                <url>http://tc-test-aos02.tc.baidu.com:8081/nexus/content/groups/public</url>

  </repository>

</repositories>

 

7.3 发布自己的构件

         上面提到了,本地仓库的一个重要的优点就是能发布自己的构件,方便部门和项目间构件的共享,那如何才能发布自己的构件到本地仓库上呢?这些配置信息同样已经定义在itil项目中了(pom.xml):

<distributionManagement>

<repository>

<id>nexus-releases</id>

<name>Nexus Release Repository</name>            <url>http://tc-test-aos02.tc.baidu.com:8081/nexus/content/repositories/releases</url>

</repository>

 

<snapshotRepository>

<id>nexus-snapshots</id>

<name>Nexus Snapshot Repository</name>            <url>http://tc-test-aos02.tc.baidu.com:8081/nexus/content/repositories/snapshots</url>

<uniqueVersion>false</uniqueVersion>

</snapshotRepository>

</distributionManagement>

         这里面定义了releasesnapshot版本的资源发布路径。这个项目只要指定parent项目是itil就能直接继承这些配置信息。

         同时,我们内部仓库的构件发布是有权限控制的,需要指定发布者的用户名和密码,这时候需要修改settings.xml配置文件,我们设定的Sonatype Nexus发布者用户名密码是deployment/deployment!@#

<server>

<id>nexus-releases</id>

<username>deployment</username>

<password>deployment!@#</password>

</server>

 

<server>

<id>nexus-snapshots</id>

<username>deployment</username>

ma

猜你喜欢

转载自zhaojun1717.iteye.com/blog/983524
今日推荐