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. 工具可移植性
像Eclipse、NetBeans和InteliJ等开发工具都有一个共同的地方来找到项目信息。
5. 便于查找个过滤构件
想Nexus这样的工具允许你是用存储在POM中的信息对仓库中的内容进行索引和搜索。
1.4 Maven与Ant的区别
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 Snapshot和Release的区别
Maven的依赖管理是基于版本管理的,对于发布状态的构件,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,Maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解决了,而Maven已经为我们准备好了这一切。
我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。
比如开发状态的版本定义为Snapshot,如:1.0.0-SNAPSHOT,待版本稳定后,为这个项目打一个tag,这个tag的版本修改为Release:1.0.0,然后发布到本地仓库,同时将原来trunk下面的项目版本升一个,如:1.0.1-SNAPSHOT。
2 Maven的安装
Windows下,先到http://maven.apache.org/download.html下载个最新的字节码zip文件,保存到本地后解压缩,然后将Maven的bin目录追加到环境变量PATH中,只要在命令行下输入:mvn -v,能正确输出Maven的版本号,则表明安装成功。
Maven的conf/目录下包含一个全局的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,如Name:maven,URL:http://m2eclipse.sonatype.org/sites/xxxx(请在浏览器中打开http://m2eclipse.sonatype.org/sites,选择一个VERSION进行下载),然后点击“OK”,Eclipse会自动进行插件的下载和安装,如下图所示。
安装完后重新启动Eclipse后就能使用Maven插件了。如果安装成功,在Window->Preferences就能看到,如下图:
4 创建项目
通过Eclipse的Maven插件可以很容易的完成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.itil)Artifact 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 项目的提交
通过Eclipse的SVN插件可以将创建的项目提交到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路径上选择svn,URL中输入项目的地址,如: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>
这里面定义了release和snapshot版本的资源发布路径。这个项目只要指定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
分享到:
相关推荐
演示Apache Maven @ DevoxxFR 2015-演示 对于每个演示,README.txt都说明了要查看的内容,并且可以执行源代码的run-demo.sh(。Run-demo.sh) 需要 : 别名j6,j7,j8和j9更改JDK 用于工具链演示的JDK 6工具链的配置
基于maven的springMVC@RestController的使用,适合初学者,......................................................................................................................................................
apache-maven-3.5.0 maven@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
** Maven 概述** Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过使用一个统一的构建过程,简化了项目的构建、依赖管理以及文档生成等任务。Maven 3.5.2是Maven的一个稳定版本,包含了众多...
Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven...
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安装...
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-...
**Windows环境下Maven 3.8.8的安装与配置** Maven是Apache软件基金会开发的一个项目管理和综合工具,主要用于Java项目的构建、依赖管理和文档生成。Maven 3.8.8是Maven的一个版本,它包含了对之前版本的一些改进和...
在IT行业中,Maven是一个非常重要的工具,尤其对于Java开发者来说,它是项目管理和构建的首选。本篇将详细讲解如何在Mac系统上,特别是配备M1芯片的MacBook上安装Apache Maven 3.6.3。 Apache Maven是一个基于项目...
【标题】"maven之开源中国Maven库" 指的是使用 Maven,一个流行的Java项目管理和集成工具,与开源中国的Maven仓库进行交互。开源中国Maven库是中国的一个开源软件资源平台,提供了大量的开源Java库,使得开发者可以...
使用Maven导入Maven工程的视频教程 仅供学习交流! 后续会持续分享相关资源,记得关注哦! 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入...
Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM),能够管理项目的构建、报告和文档,通过一套统一的构建生命周期和插件系统,极大地简化了软件...
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,...
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-...
Maven最新版是款项目管理和构建自动化工具。Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System)。 安装...
Apache Maven是一个强大的项目管理工具,它提供了丰富的插件系统来扩展构建过程。exec-maven-plugin是Maven生态系统中的一个插件,它允许用户在Maven构建过程中执行外部命令或脚本。这使得Maven项目可以集成更多的...
Apache Maven 是一个强大的Java项目管理工具,它极大地简化了构建、依赖管理和项目文档的生成过程。Maven 3.6.0是该工具的一个稳定版本,提供了多项改进和新特性,旨在提高开发效率和增强项目的可维护性。 Maven的...
开发者可以使用插件扩展Maven的功能,例如,`maven-jar-plugin`用于打包JAR文件,`maven-war-plugin`用于打包WAR文件,`maven-compiler-plugin`负责编译源代码。 - **聚合与继承**:Maven支持项目聚合和继承,通过`...
Maven是Java领域广泛使用的项目管理工具,它能够帮助开发者完成项目的构建、文档生成、报告、依赖管理和软件生命周期管理等工作。通过本文的介绍,我们可以了解到Maven的基本概念、安装配置、基本使用和深入应用详解...