`
阅读更多

 

 

 

 

Maven@ITIL

 

 

 

 

 

 

 

 

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

分享到:
评论

相关推荐

    java-evolving-fr:Apache Maven @ DevoxxFR 2015-演示

    演示Apache Maven @ DevoxxFR 2015-演示 对于每个演示,README.txt都说明了要查看的内容,并且可以执行源代码的run-demo.sh(。Run-demo.sh) 需要 : 别名j6,j7,j8和j9更改JDK 用于工具链演示的JDK 6工具链的配置

    基于maven的springMVC@RestController的使用

    基于maven的springMVC@RestController的使用,适合初学者,......................................................................................................................................................

    apache-maven-3.5.0

    apache-maven-3.5.0 maven@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    ** Maven 概述** Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过使用一个统一的构建过程,简化了项目的构建、依赖管理以及文档生成等任务。Maven 3.5.2是Maven的一个稳定版本,包含了众多...

    开源工具Maven3.9.4版本压缩包

    Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven...

    apache-maven-3.6.0_apache-maven-3.6.0_maven压缩包_maven3.6.0下载_

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和文档。Maven 3.6.0是该工具的一个稳定版本,提供了许多改进...

    maven安装maven安装maven安装maven安装maven安装

    maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装...

    Maven全版本资源,Maven 3.0.5-3.8.5,每个版本包含4个文件,Maven3全资源打包下载,Maven全集

    apache-maven-3.0.5 apache-maven-3.1.1 apache-maven-3.2.5 apache-maven-3.3.9 apache-maven-3.5.4 apache-maven-3.6.3 apache-maven-3.8.5 每个版本包含4个文件: apache-maven-3.8.5-bin.tar.gz apache-maven-...

    Windoiws的maven3.8.8

    **Windows环境下Maven 3.8.8的安装与配置** Maven是Apache软件基金会开发的一个项目管理和综合工具,主要用于Java项目的构建、依赖管理和文档生成。Maven 3.8.8是Maven的一个版本,它包含了对之前版本的一些改进和...

    Mac的maven安装包apache-maven-3.6.3.zip

    在IT行业中,Maven是一个非常重要的工具,尤其对于Java开发者来说,它是项目管理和构建的首选。本篇将详细讲解如何在Mac系统上,特别是配备M1芯片的MacBook上安装Apache Maven 3.6.3。 Apache Maven是一个基于项目...

    maven之开源中国Maven库

    【标题】"maven之开源中国Maven库" 指的是使用 Maven,一个流行的Java项目管理和集成工具,与开源中国的Maven仓库进行交互。开源中国Maven库是中国的一个开源软件资源平台,提供了大量的开源Java库,使得开发者可以...

    使用Maven导入Maven工程的视频教程

    使用Maven导入Maven工程的视频教程 仅供学习交流! 后续会持续分享相关资源,记得关注哦! 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入...

    maven.rar apache-maven-3.5.4

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM),能够管理项目的构建、报告和文档,通过一套统一的构建生命周期和插件系统,极大地简化了软件...

    maven 3.8.8 解压安装版

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,...

    apache-maven-3.8.6.zip

    apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-...

    maven3.2.5安装包下载

    Maven最新版是款项目管理和构建自动化工具。Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System)。 安装...

    Maven exec-maven-plugin:执行外部命令的实践指南

    Apache Maven是一个强大的项目管理工具,它提供了丰富的插件系统来扩展构建过程。exec-maven-plugin是Maven生态系统中的一个插件,它允许用户在Maven构建过程中执行外部命令或脚本。这使得Maven项目可以集成更多的...

    最新Maven版本:apache-maven-3.6.0

    Apache Maven 是一个强大的Java项目管理工具,它极大地简化了构建、依赖管理和项目文档的生成过程。Maven 3.6.0是该工具的一个稳定版本,提供了多项改进和新特性,旨在提高开发效率和增强项目的可维护性。 Maven的...

    Maven3.5.4本地安装包

    开发者可以使用插件扩展Maven的功能,例如,`maven-jar-plugin`用于打包JAR文件,`maven-war-plugin`用于打包WAR文件,`maven-compiler-plugin`负责编译源代码。 - **聚合与继承**:Maven支持项目聚合和继承,通过`...

    maven教程-maven教程-maven教程

    Maven是Java领域广泛使用的项目管理工具,它能够帮助开发者完成项目的构建、文档生成、报告、依赖管理和软件生命周期管理等工作。通过本文的介绍,我们可以了解到Maven的基本概念、安装配置、基本使用和深入应用详解...

Global site tag (gtag.js) - Google Analytics