Maven的使用
1. Maven的简介
1.1 Maven是什么?
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
1.2 约定优于配置
Maven 对约定优于配置的应用不仅仅是简单的目录位置,Maven 的核心插件使用了一组通用的约定,以用来编译源代码,打包可分发的构件,生成 web 站点,还有许多其他的过程。 Maven 的力量来自它的"武断",它有一个定义好的生命周期和一组知道如何构建和装配软件的通用插件。如果你遵循这些约定,Maven 只需要几乎为零的工作——仅仅是将你的源代码放到正确的目录,Maven 将会帮你处理剩下的事情。
使用遵循约定优于配置系统的一个副作用是用户可能会觉得他们被强迫使用一种特殊的方法。 当然 Maven 有一些核心观点不应该被怀疑,但是其实很多默认行为还是可配置的。 例如项目源码的资源文件的位置可以被自定义,JAR 文件的名字可以被自定义,在开发自定义插件的时候,几乎任何行为可以被裁剪以满足你特定的环境需求。 如果你不想遵循约定,Maven 也会允许你自定义默认值来适应你的需求。
1.3 一个“项目”的概念模型
Maven不仅仅是一个“构建工具”,它不仅仅是在类似于 make Ant 的工具的基础上的改进,它是包含了一组关于软件项目和软件开发的语义规则的平台。这个基于每一个项目定义的模型实现了如下特征:
依赖管理
由于项目是根据一个包含组标识符,构件标识符和版本的唯一的坐标定义的。项目间可以使用这些坐标来声明依赖。
远程仓库
和项目依赖相关的,我们可以使用定义在项目对象模型(POM)中的坐标来创建 Maven 构件的仓库。
全局性构建逻辑重用。插件被编写成和项目模型对象(POM)一起工作,它们没有被设计成操作某一个已知位置的特定文件。一切都被抽象到模型中,插件配置和自定义行为都在模型中进行。
工具可移植性/集成
EclipseNetBeans,和 InteliJ 这样的工具现在有共同的地方来到项目的信息。在 Maven 出现之前,每个 IDE 都有不同的方法来存储实际上是自定义项目对象模型(POM)的信息。Maven 标准化了这种描述,而虽然每个 IDE 仍然继续维护它的自定义项目文件,但这些文件现在可以很容易的由模型生成。
便于搜索和过滤构件
Nexus 这样的工具允许你使用存储在 POM 中的信息对仓库中的内容进行索引和搜索。
Maven 为软件项目的语义一致性描述的开端提供了一个基础。
1.4 Maven是Ant的另一种选择么?
Maven Ant 的另一种选择。你也可以很容易的在你项目的 Maven 构建中集成 Ant 构建脚本。很明确的说作为构建的基本技术,Maven Ant 的更好选择。
1.5 参考
www.sonatype/books/maven-book/reference_zh/introduction.html
2. 安装和运行Maven
2.1 Maven下载
Maven官方下载地址:/download.html
当前最新版本:Maven 2.2.1
2.2 Maven安装
Windows 2000/XP平台上
1. 解压发布包,例如apache-maven-2.2.1-bin.zip,到目录下,假定为C:\apache-maven-2.2.1
2. 添加M2_HOME的环境变量,设置变量的值为C:\apache-maven-2.2.1
3. 添加M2的环境变量,设置变量的值为 %M2_HOME%\bin.
4. 可选: 添加MAVEN_OPTS的环境变量,设置变量的值为:-Xms256m -Xmx512m.
5. 更新Path的环境变量,追加 %M2% ;Path的变量值上.
6. 确认环境变量JAVA_HOME 已经存在, %JAVA_HOME%\bin 已经在Path的环境变量中.
7. 在命令行模式下运行mvn –version确认安装正确。
参考:/download.html
2.3 用户相关配置和仓库
当你不再仅仅满足于使用Maven,还想扩展它的时候,你会注意到Maven创建了一些本地的
用户相关的文件,还有在你home目录的本地仓库。在%HOME%/.m2目录下有:
%HOME%/.l
该文件包含了用户相关的认证,仓库和其它信息的配置,用来自定义Maven的行为。
%HOME%/.m2/repository/
该目录是你本地的仓库。当你从远程Maven仓库下载依赖的时候,Maven在你本地仓库存储了这个依赖的一个副本。
2.4配置使用Maven仓库的镜像
1. 拷贝附件l:到打开的目录下,也就是 %HOME%\.m2
参考:www.sonatype/books/nexus-book/reference/maven-sect-single-group.html
3. Maven实战
3.1一个简单Maven的web应用项目
    1. 运行命令,例如创建webapp1
mvn archetype:create -DarchetypeGroupId=com.channelsoft.app -DarchetypeArtifactId=channelsoft-webapp-archetype  -DarchetypeVersion=1.0.0.3 -DgroupId=com.channelsoft.webapp1 -DartifactId=webapp1
    2. 运行完后的目录结构:
E:\FANGYUN\TEMP\WEBAPP1
└─src
    └─main
        ├─java
        │  └─com
        │      └─channelsoft
        │          └─webapp1
        ├─resources
        └─webapp
            └─WEB-INF
参考:
a) 配置模板工程:/plugins/maven-archetype-plugin/advanced-usage.html
b) 共享模板工程:/plugins/maven-deploy-plugin/
3.2 简单的项目对象模型 (Project Object Model)
<project xmlns="/POM/4.0.0"
        xmlns:xsi="/2001/XMLSchema-instance"
  xsi:schemaLocation="/POM/4.0.0 /maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.channelsoft.webapp1</groupId>
  <artifactId>webapp1</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>channelsoft-webapp Maven Webapp</name>
  <url></url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
这个l文件是你将会面对的Maven项目中最基础的POM,一般来说一个POM文件会复
杂得多:定义多个依赖,自定义插件行为。最开始的几个元素——groupIdartifactId, packaging, version——Maven的坐标(coordinates),它们唯一标识了一个项目。nameurlPOM提供的描述性元素,它们给人提供了可阅读的名字,将一个项目关联到了项目web站点。最后,dependencies元素定义了一个单独的,测试范围(test-scoped)依赖,依赖于称为JUnit的单元测试框架。这些话题将会Section 3.5, “核心概念”被深入介绍,当前,你所需知道的是,l是一个让Maven跑起来的文件。
Maven运行的时候,它是根据项目的l里设置的组合来运行的,一个最上级的POM定义了Maven的安装目录,在这个目录中全局的默认值被定义了,(可能)还有一些用户定义的设置。想要看这个有效的 (effective)POM,或者说Maven真正运行根据的POM,在simple项目的基础目录下跑下面的命令。
$ mvn help:effective-pom
一旦你运行了此命令,你应该能看到一个大得多的POM,它暴露了Maven的默认设置
3.3核心概念
3.3.1 Maven插件和目标 (Plugins and Goals)
一个Maven插件是一个单个或者多个目标的集合。Maven插件的例子有一些简单但核心的插件,像Jar插件,它包含了一组创建JAR文件的目标,Compiler插件,它包含了一组编译源代码和测试代码的目标,或者Surefire插件,它包含一组运行单元测试和生成测试报告的目标。而其它的,更有专门的插件包括:Hibernate3插件,用来集成流行的持久化框架HibernateJRuby插件,它让你能够让运行ruby称为Maven构建的一部分或者用Ruby来编写Maven插件。Maven也提供了自定义插件的能力。一个定制的插件可以用maven下载教程Java编写,或者用一些其它的语言如AntGroovybeanshell和之前提到的Ruby

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。