Maven入门

来源:互联网 发布:java程序结构组成 编辑:程序博客网 时间:2024/05/12 17:39

Mavn是Java项目的一个构建工具,目前已成为Java项目构建工具的规范和事实标准。

Maven主要包含5个方面的内容:坐标、依赖、仓库、生命周期、插件。

坐标是指项目的唯一标识,以GAV(groupId、artifactId和version)区分,这里我们可以将groupId理解为某某公司的XXX组或者产品线,开发了某一个项目,对应的版本为XXX。这里groupId包含公司和内部组(或产品线)的信息,如org.apache.commons,表示Apache软件组织下的Java Commponents产品线:ArtifactID则表示项目名称,如common-io,表示项目名称,Version则表示某一Artifact的版本,如1.3.2,1.3.3-SNAPSHOT等。

依赖是指项目所依赖的相关jar包,每一个项目都有一个唯一标识符,如果你想引用该项目的产品(如jar包),执行设定 GAV信息即可。通过依赖机制,很好解决了CLASSPATH问题。

仓库是存放项目的产出(Atifact)的仓库,对应Java项目来说,主要是Jar,War和Zip等。Jar是最常见的,如项目中的一个客户包,一个工具包等,然后提供给第三方使用。War是一个web应用,仓库里面比较少,但如果你做一个通用型的web应用,其他项目就可以包含war包,提升相关的功能。Zip也不多见,通常为一些资源或者SDK,如果我们了解的Google APP Engine Java SDK,在Maven仓库中有存放,这样GAEPlugin可以利用该Zip文件,实现动态的SDK安装,最终用户不需要再下载和安装SDK,实现SDK透明化安装。前面说到的依赖,Maven会根据项目依赖信息动态去仓库中下载并存储到本地。Maven仓库分为两类:远程参考和本地仓库。远程参考是指Maven社区同意的中心仓库,在该中心仓库可以找到项目产出的artifact,中心仓库地址为http://repo1. Maven.org/maven2,还有一些第三方的远程仓库,如JBoss的Maven仓库,主要是第三方为其项目开发而设定的仓库。本地仓库是指存远程的artifact下载到本地后存放的文件目录,对应是本地文件系统的一个目录,Maven在查找依赖时实现本地仓库,如果本地仓库没有对应的aetifact,则会去远程下载,然后保存在本地的仓库中。

生命周期是指项目构建过程,对应Maven项目来说,有三套生命周期:default、clean和site,clean负责清空项目环境,site负责项目的站点生成,而default是这个项目构建的标准流程。一个生命周期会对应于各个阶段。

插件是Maven的设计机制,Maven包含一个核心功能组件,而扩展功能都是通过插件完成,即使我们最常见的编译功能也是通过complier插件完成的,其他如测试,打包,发布等,都是对应的插件完成的。Maven的主要插件可以在http://maven.apache.org/plugins/index.html和  http://mojo.codehaus.org/plugins.html 找到,当然还有一些第三方插件没有被这两者包含,这个需要开发人员自行处理。

 

POM

 POM是指项目对象模型(ProjectObject Model),也就是对项目的信息进行抽象形成的一个模型对象,该对象包含了项目的基本各种信息,对于Java程序员来说,我们可以将其理解为一个MavenProject类,该类包含了各种属性,每一个时间的项目,相当于是 MavenProject类的实例,实际上在 Maven 3 的源码中,也存在这样的一个 MavenProject 类。针对每一个Maven项目来说,项目的个性信息通过一个 pom.xml来呈现,如项目的 groupId,artifactId,version,介绍等等。

对于一个典型的POM,应该具有以下标准信息:

项目的基本信息:.

 <modelVersion>

 <groupId> :groupId 通常是产品线的代号,注意groupId 一定要保护产品线的信息,便于划分项目

 <artifactId> :这个是 Maven 项目中模块的名称标识,对于artifactId 来说,通常需要包含产品线的名称,因为最终的 jar名称通常为artifactId+version+”.jar”,如果 artifactId 名称非常普通,那么会导致 jar 文件名称冲突。

 <version> :版本号由三个部分组成,如1.2.3,,分别为主版本号、次版本号和维护版本号如有特殊的变化,可以添加修复版本号,如 1.2.3-bug11这种方式。当然开发的时候,我们需要使用SNAPSHOT版本,就是在版本号后添加“-SNAPSHOT”后缀,主要是大写。

<packaging> :packaging是打包类型,通常为 pom,jar,war和 ear,pom打包类型表示抽象概念,没有实际的产出,如项目的根 pom都是 pom打包类型。

<name> :name和description表示项目的名称和描述,这里的名称要和 artifactId区分开,

artifactId 是项目的标识,如 uic-client 为artifactId,而名称为 UIC 客户端,描

述则是项目的基本介绍啦。

<description>

<url> :url是项目的介绍,别人可以通过访问这个URL来了解项目的情况

<licenses>

<scm><url>:scm主要是 svn的信息,设置一下项目的 svn url即可

<scm><connection>

如果项目的打包类型为 jar,需要提供 jar 文件,java 源码(-source.jar)和 javadoc(-javadoc.jar)三个文件。  

POM的基本信息设置完毕后,就要进行依赖管理,一个项目如果要依赖第三方开发包,都要通过dependency进行依赖管理。

<?xml version="1.0"encoding="UTF-8"?>

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">

  …….

        <dependency>

           <groupId>****</groupId>

            <artifactId>****</artifactId>

        </dependency>

  ……..

        </dependency>

     ………

</project>

 项目的依赖还有一个特性就是依赖管理(Dependency Management),如果我们有一个项
目,包含多个子模块,而这些子模块可能都需要用到共同的依赖,如果将这些依赖都放置在
项目的pom.xml 中,在遇到依赖升级的时候,我们调整一下项目的pom.xml 里的依赖版本
号,就可以让子模块自动升级依赖。依赖管理很简单,就是在dependencis 元素上包一层
dependencyManagement即可,然后各个子模块只需要声明依赖的groupId 和artifactId,不需
要指明版本号,Maven 会自动从项目pom.xml 的dependencyManagment 获取。这里有一个
说明,不少程序员将项目用到的所有依赖都声明在pom.xml 中,然后使用依赖管理,各个
子模块进行引用。

清除产生的项目:mvn clean

生成eclipse项目:mvn eclipse:eclipse

打包:mvn package

在本地Repository安装jar:mvn install


原创粉丝点击