`
liyiye
  • 浏览: 424939 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

概述

Maven 最初的目的是在Jakarta Turbine项目中使构建处理简单化。几个项目之间使用到的Ant build文件差异很小,各个JAR都存入CVS。因此希望有一个标准的方法构建各个工程,清晰的定义一个工程的组成,一个容易的方法去发布项目信息并且去提供一种在各个项目之间共享JAR包。

结果出现了一种功能能用于构建和管理任何基于java的工程。Maven小组希望他们已经做到了一些事情,这将有助于Java开发者更容易的完成每天的工作并且有助于理解任何基于java的项目。

Maven的目标

  • 使构建过程更容易
  • 提供统一构建系统
  • 提供高质量的项目信息
  • 提供开发的最佳实践指南
  • 能无缝的加入新的特性

对Maven的错误理解

  • Maven是一个站点和文档制作工具。
  • Maven扩展了Ant,使其能下载到各种依赖包
  • Maven是一系列可重用的Ant脚本

Maven的版本

Maven现在主要有Maven 1.x和Maven 2.x,其中现在最新版本是Maven 2.02。

Maven 2完成了对Maven 1的重写。重写的首要目的是要提供了强大的Jave构建和包含API的项目,允许Maven被植入任何地方,尤其是高级别的产品如IDEs、质量工具、报告工具等这些。Maven 2构建生命周期的概念正式化,其比Maven更易扩展。

因此现在我们主要研究的就是Maven 2。

Maven的安装

Windows 2000/xp下的安装

  1. 解压缩maven-2.0.2-bin.zip到你希望安装Maven 2.0.2的所在目录。这里假设你选择了C:\ProgramFiles\Apache Software Foundation\maven-2.0.2.
  2. 将C:\Program Files\Apache Software Foundation\maven-2.0.2\bin目录加入到你的%path%环境变量中。
  3. 同时,确认JAVA_HOME是否正确设置成功。
  4. 运行 mvn --version 确认是否安装成功。

显示Maven version: 2.0.2 则表示安装成功。

基于Unxi-based的操作系统(Linux,Solaris and Mac OS X)

  1. 解压缩发布包到你希望安装Maven 2.0.2的所在目录。这里假设你选择了/usr/local/maven-
  2. 将/usr/local/maven-2.0.2/bin目录加入到你的path环境变量中,例如:PATH=/usr/local/maven-2.0.2y/bin: $PATH。
  3. 同时,确认JAVA_HOME是否正确设置成功。
  4. 运行 mvn --version 确认是否安装成功。

显示Maven version: 2.0.2 则表示安装成功。

查看依赖库的位置
http://mvnrepository.com/

Maven主要功能

Maven是一种对项目的管理工具,它提供了一种方式来管理以下项目中涉及到的工作内容,同时以下也是Maven的主要功能:

  • 构建项目(Builds)
  • 文档编制(Documentation)
  • 报告(Reporting)
  • 依赖管理(Dependencies)
  • 配置管理(SCMs)
  • 发布管理(Releases)

构建项目

首先创建一个Maven工程。Maven可用于构建java应用工程和java web应用工程。

web项目

mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp

目录结果如下:

my-webapp



|-- pom.xml



`-- src



`-- main



|-- webapp



| |-- WEB-INF



| | `-- web.xml



| `--index.jsp



`-- resources

其他的目录则需要自己补充。

其pom.xml文件内容如下:

<project xmlns="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.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany.app</groupId>

    <artifactId>my-webapp</artifactId>

    <packaging>war</packaging>

    <version>1.0-SNAPSHOT</version>

    <name>Maven Webapp Archetype</name>

    <url>http://maven.apache.org</url>

    <dependencies>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>3.8.1</version>

            <scope>test</scope>

        </dependency>

    </dependencies>

    <build>

        <finalName>my-webapp</finalName>

    </build>

</project>

java应用程序

mvn archetype:create -DgroupId=com.mycompany.ap -DartifactId=my-app

命令正确执行后,生成如下目录:

my-app



|-- pom.xml



`-- src



|-- main



| `-- java



| `-- com



| `-- mycompany



| `-- app



| `-- App.java



`-- test



`-- java



`-- com



`-- mycompany



`-- app



`-- AppTest.java

其pom.xml文件内容如下:

<project xmlns="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.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany.ap</groupId>

    <artifactId>my-app</artifactId>

    <packaging>jar</packaging>

    <version>1.0-SNAPSHOT</version>

    <name>Maven Quick Start Archetype</name>

    <url>http://maven.apache.org</url>

    <dependencies>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>3.8.1</version>

            <scope>test</scope>

        </dependency>

    </dependencies>

</project>

Maven项目的标准目录介绍

Maven提倡使用一个共同的标准目录结构,使开发人员能在熟悉了一个Maven工程后,对其他的Maven工程也能清晰了解。这样做也省去了很多设置的麻烦。
以下的文档介绍是Maven希望的目录结构,并且也是目录创建工程是采用的目录结构。Maven推荐大家尽可能的遵守这样的目录结构。

src/main/java - 应用程序/库源码
src/main/resources - 应用程序/库资源
src/main/filters - 资源的filter文件
src/main/assembly - assembly描述符
src/main/config - 配置文件
src/main/webapps - Web应用程序源码
src/test/java - 测试源码
src/test/resources - 测试资源
src/test/filters - 测试资源的filter
src/site - 站点
LICENSE.txt - 项目许可
README.txt - 项目readmine

在顶级目录上是工程的描述文件pom.xml(如果使用Ant则还包括其他属性文件,maven.xml或build.xml),另外还包括提供给最终用户的文件,如,README.txt, LICENSE.txt等等。
顶级目录还包括两个子目录:src,target。顶级目录下可能出现的其他目录仅仅是CVS或.svn和其他多模块工程的工程目录,最好不要再有其他目录。
Target目录是所有工程编译构建的输出目录。
Src目录包含所有工程的源码文件,配置文件,资源文件等等。它下面的子目录一般包含main(主要的工程源文件),test(测试文件),site(项目站点文件)。

项目构建的生命周期的介绍

Maven 2是围绕着构建生命周期概念设计的。这意味着,构建或者发布的过程已经被清晰的定义了。
当我们使用Maven构建工程时,我们只需要了解几个Maven定义好的命令即可,其他的工作则交给POM来完成。
以下给出Maven提供的构建生命周期列表:

validate 验证项目是否正确,所有必要信息是否可用。
generate-sources 生成编译所需的任意源码。
process-sources 处理源码,比如过滤一些数值。
generate-resources 生成包里所需包含的资源。
process-resources 处理资源,并拷贝到目标目录中,以便打包。
compile 编译项目源码
process-classes 对编译生成的文件进行后期处理。比如,对Java类的字节码进行修改。
generate-test-sources 生成编译所需的任意测试代码
process-test-sources 处理测试代码,比如过滤一些数值。
generate-test-resources 生成测试用资源
process-test-resources 处理资源,并拷贝到测试用的目标目录中。
test-compile 编译测试代码,放到测试目标目录
test 用合适的单元测试框架来运行测试。这些测试不应当要求代码被打包或部署。
package 把编译好的代码打包成可以发布的格式,例如JAR
pre-integration-test 执行集成测试之前必须完成的动作,比如,设置集成测试所需的环境。
integration-test 执行集成测试。如果需要,会事先把包部署到集成测试所需的运行环境中。
post-integration-test 执行集成测试之后必须完成的动作,比如运行环境的清理。
verify 检查包是否合法,是否满足特定的质量要求
install 把包安装在本地仓库中,以便作为本地其他项目的依赖。
deploy 在集成或发布环境中完成部署,并且把最终的包拷贝到远程仓库中,以便被其他开发人员和工程所共享。

因此,当我们构建一个项目时,只需要了解自己希望做什么,然后执行以上对应的生命周期即可。
例如,我们希望编译我们的工程。在命令行状态下进入到工程的pom.xml文件所在的目录中,使用命令:mvn compile;希望构建打包我们的工程,使用mvn package即可。
当然了,maven的构建生命周期也是可以扩展和自定义的,这里就先不做介绍了。

pom.xml介绍

pom.xml包含了一个项目的项目对象模型(POM)。项目对象模型(POM)是Maven工作的基本单元。请记住,这个是非常重要的,因为POM包含了工程的非常重要的信息块,并且基本上包含了和项目相关的任何要素。

让我们熟悉一下pom.xml包含的基本项:

  • poject 这是pom.xml的顶级元素。
  • modelVersion 这是元素指出了这个POM使用的是那个版本的对象模型。这个模型的版本自身么是经常改变的,但这种改变是为了使模型更加的稳定。
  • groupId 这个元素指出创建这个工程的组织或团队的唯一标识,并且这个也是一个项目的关键标识,推荐使用这个组织或团队的完整域名。例如:org.apache.maven.plugins是为Maven plug-ins定义的groupId。
  • artifactId 这个元素指出这个工程的主要制品的基本名称。一个工程的主要制品如果是jar文件,次要制品如果是源码包,则次要制品的名称的一部分也使用 artifactId。典型的制品名称使用这样的格式:<artifactId>-<version>.<extension>(例如,myapp- 1.0.jar)。
  • packaging 这个元素指出制品的类型(例如:JAR,WAR,EAR等等)。这个元素不仅仅指示出制品的类型,同时也指示出工程构建过程中的部分生命周期。Packaging的默认值是JAR。
  • version 这个元素指出这个项目产生的制品的版本号,Maven在帮助开发人员管理版本号时走了很长的路,以后你将经常看到SNAPSHOT在一个版本中,这个表示一个工程仍然在开发状态。
  • name 这个元素指出这个工程显示的名称。这个常用于Maven产生的文档中。
  • url 这个员算指出在哪里能发现工程的站点。这个常用于Maven产生的文档中。
  • desription 这个元素提供了这个工程基本的描述。这个也常用于Maven产生的文档中。

以上只是pom.xml中的一些基本项,完整的pom.xml的元素介绍请参考:

http://maven.apache.org/maven-model/maven.html

文档编制

文档创建:

对于如何创建和编制文档,maven有一个简单的示例命令:

mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-site

执行了以上命令后,我们将得到这样一个目录结构:

my-app



|-- pom.xml



`-- src



|-- site



|-- apt



| |-- format.apt



| `-- index.apt



|-- fml



| `-- faq.fml



|-- fr



| |-- apt



| | |-- format.apt



| | `-- index.apt



| |-- fml



| | `-- faq.fml



| `-- xdoc



| `-- xdoc.xml



|-- site.xml



|-- site_fr.xml



`-- xdoc



`-- xdoc.xml

你现在可以看到一个$basedir/src/site目录,以及它包含的一些站点描述文件(site.xml,site_fr_xml),和各种maven支持的文档格式相对应的目录和示例文档都已经产生。
以上的创建只是示例,我们自己创建时就没有命令行使用了,只能按照上面的目录结构创建我们需要的文档,并在文档中写入我们工程的信息。
让我们再来看看maven所支持的文档格式。

文档格式

Maven支持3种文档格式:

  • Xdoc format 这个是一种简单快捷的,基于original Anakia format的文件格式。
  • APT format “Almost Plain Text”,(接近普通文本格式),这是一种允许你采用接近普通文本格式的方式简单的写出类似于wiki格式的结构性文档。

如果你对此很感兴趣,请参考完整的APT format的书写规范

http://maven.apache.org/guides/mini/guide-apt-format.html

  • FML formate 这个是一种FAQ结构形式的文档格式。

了解了以上的文档格式,我们就可以按照以上文档格式的要求,选用我们喜欢的文档格式编写我们的文档。当编写完成后,我们需要生成所有文档。这里生成文档,maven的处理是生成站点(site),也就是身成html页面,这样所有对此项目感兴趣的人员都可以通过访问此站点来了解所有的信息。生成站点的命令是:

mvn site

文档国际化

当然,你可能早就想到文档国际化的问题,这里maven也早就处理了。在pom.xml中

<project>

    ...

    <build>

        <plugins>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-site-plugin</artifactId>

                <configuration>

                    <locales>en,fr</locales>

                </configuration>

            </plugin>

        </plugins>

    ...

</project>

注意到<locales>en,fr</locales>了吗?这里就支持了英语(en)和法语(fr)两种语言的文档。请注意以下生成的目录,由于英语是在第一个,属于默认语言,所以$basedir/src/site目录下并没有en的文件夹,而有fr的文件夹,而且这个文件夹里包含了maven支持的文档格式相对应的目录和示例文档。

报告设置

Maven有多个报告能添加在你的文档站点中,来显示项目当前的状态,这些报告采用插件的形式可在项目中配置。
为了为你的文档站点增加这些报告,必须增加reporting部分在pom.xml中,下面这个为标准的项目信息报告插件在pom.xml中的配置。

<project>

    ...

    <reporting>

        <plugins>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-project-info-reports-plugin</artifactId>

            </plugin>

        </plugins>

    </reporting>

    ...

Maven在执行mvn site命令时,除了产生开发人员编制的文档信息外,根据pom.xml中设置的报告,会同时生成这个项目信息的报告文档。并且这个是默认的生成项。

这个默认的生成项将根据项目的信息生成以下报告:

  • 持续集成信息(Continuous Integration)
  • 依赖性信息(Dependencies)
  • 发布追踪信息(Issue Tracking)
  • 邮件列表信息(Mailing Lists)
  • 工程协议信息(Project License)
  • 项目团队信息(Project Team)
  • 源码库信息(Source Repository)

根据笔者测试,以上信息均是在pom.xml进行设置的。

  • 持续集成信息根据以下配置信息生成:
<ciManagement>

<system/>

<url/>

<notifiers>

<notifier>

<type/>

<sendOnError/>

<sendOnFailure/>

<sendOnSuccess/>

<sendOnWarning/>

<address/>

<configuration/>

</notifier>

</notifiers>

</ciManagement>

依赖性信息根据以下配置信息有关

<dependencies>

<dependency>

<groupId/>

<artifactId/>

<version/>

<type/>

<classifier/>

<scope/>

<systemPath/>

<exclusions>

<exclusion>

<artifactId/>

<groupId/>

</exclusion>

</exclusions>

<optional/>

</dependency>

</dependencies>

issue追踪信息

<issueManagement>

<system/>

<url/>

</issueManagement>

邮件列表信息

<mailingLists>

<mailingList>

<name/>

<subscribe/>

<unsubscribe/>

<post/>

<archive/>

<otherArchives/>

</mailingList>

</mailingLists>

笔者在pom.xml中设置以上信息后,运行 mvn site

工程协议信息

<licenses>

<license>

<name/>

<url/>

<distribution/>

<comments/>

</license>

</licenses>

项目团队信息

<organization>

<name/>

<url/>

</organization>

<developers>

<developer>

<id/>

<name/>

<email/>

<url/>

<organization/>

<organizationUrl/>

<roles/>

<timezone/>

<properties/>

</developer>

</developers>

<contributors>

<contributor>

<name/>

<email/>

<url/>

<organization/>

<organizationUrl/>

<roles/>

<timezone/>

<properties/>

</contributor>

</contributors>

源码库信息

<scm>

<connection/>

<developerConnection/>

<tag/>

<url/>

</scm>

默认情况下这些文档将生成在$basedir/src/site目录下。
需要得到其他的报告,则需要配置其他的报告插件。
要想了解更多的信息,请参考以下网页:http://cvs.peopleware.be/training/maven/maven2/morePlugins.html

分享到:
评论

相关推荐

    Maven一站式指南:从下载安装到实战应用-Markdown文章材料.zip

    现在,我们为你带来了这份《Maven一站式指南》,从下载安装到实战应用,全面覆盖Maven的各个方面。 快速上手,轻松入门:该指南首先带你轻松完成Maven的安装和配置,让你能够迅速开始使用Maven进行项目构建。 深入...

    apache-maven多版本.zip

    Apache Maven 是一个强大的项目管理工具,广泛用于Java应用程序的构建、管理和依赖管理。这个压缩包“apache-maven多版本.zip”包含了Maven的两个不同版本,即3.6.1和3.6.3,这使得用户可以在不同的项目或者环境下...

    maven 一个新的java工具

    ### Maven:一种新的Java工具 #### Maven是什么? Maven是一个由Apache基金会支持的软件项目管理工具,主要用于Java项目的构建、依赖管理和项目信息管理。Maven的设计理念是“约定优于配置”,这大大简化了项目的...

    maven 3.5.2 maven 3.5.2 maven 3.5.2

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

    Maven学习资料个人总结

    Apache Maven一个潜在的基于java的apache ant的构建工具的替代者。两者之间的比较: 第一:ant脚本是可以直接运行在maven中的。maven和ant最大的差别就是在于maven的编译以及所有的脚本都有一个基础,就是POM...

    Maven仓库apache-maven-3.2.5

    Apache Maven 是一个强大的项目管理工具,它主要用于Java项目的构建、依赖管理和项目信息管理。Maven 3.2.5是该工具的一个版本,发布于2014年,旨在提高构建效率,增强稳定性,并修复了前一版本的一些已知问题。 在...

    apache-maven-3.6.2_maven_

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和依赖关系。Maven 的核心理念是通过标准化的构建生命周期和...

    maven3.2.5安装包下载

    Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System)。 安装步骤 先下载,下载完成后,解压到某个目录  ...

    maven 3.8.8 解压安装版

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

    Maven很Maven仓库

    Maven是一个在Java开发中广泛使用的项目管理和综合工具,它通过一个声明式的配置来管理项目的构建、报告和文档。Maven仓库则是Maven系统中的一个重要组成部分,它存储了各种依赖库,如JAR文件,使得开发者可以轻松地...

    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是该工具的一个稳定版本,提供了许多改进...

    Windoiws的maven3.8.8

    - **Maven_HOME**:在系统环境变量中新建一个名为`Maven_HOME`的变量,将其值设置为解压后的Maven目录路径,如`C:\Program Files\apache-maven-3.8.8`。 - **Path**:在用户或系统环境变量的`Path`中添加`%Maven_...

    maven.rar apache-maven-3.5.4

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

    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采用坐标系统来唯一标识一个项目依赖,开发者只需要指定依赖的groupId、artifactId和version,Maven便能自动解析并下载依赖。多模块项目是指一个项目被分为多个子模块,可以分别进行构建,而继承...

    maven3.6的安装包

    Maven 是一个强大的项目管理工具,主要应用于Java开发领域。它简化了构建、依赖管理和项目生命周期的管理,通过使用一种标准化的项目对象模型(Project Object Model,POM)来描述项目,并自动解决项目的构建过程。...

    maven API maven API

    2. **生命周期 (Lifecycle)**: Maven的生命周期包括一系列阶段(phases),如clean、validate、compile、test、package、install和deploy,这些阶段按顺序执行,构建并管理整个项目流程。 3. **插件 (Plugins)**: ...

    maven历史版本下载

    Maven 3.5系列是Maven 3的一个重要分支,它在3.5.0基础上进行了一系列优化,提高了性能,并修复了已知问题。 Maven 3.5.2的亮点包括: 1. **性能提升**:此版本在执行构建时提高了速度,尤其是在大型项目中,这...

    Maven3.5.4本地安装包

    总结,Maven 3.5.4作为一款强大的构建工具,提供了标准化的项目管理方式,简化了依赖管理和构建过程,是Java开发中不可或缺的一部分。通过本地安装和配置,开发者可以充分利用Maven的强大功能,提升开发效率和项目...

Global site tag (gtag.js) - Google Analytics