LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2650|回复: 6

[翻译]Maven五分钟入门

[复制链接]
发表于 2009-8-1 14:12:22 | 显示全部楼层 |阅读模式
个人感觉Maven作为开源软件,已经有了不少以前的商业版建立工具的特性。虽然一直被当成高手的玩具,但是用过之後发现许多日常的工作完全可以用Maven做,没有必要自己写一大堆脚本,而且自己给Maven写扩展也不是很复杂的事情。

所以感觉就算是新手,使用Maven也是很有益处的,至少可以在编译时可以免掉很多重复劳动。

所以就翻译了这篇文章,大家可以看看
Maven五分钟入门

安装

Maven是一款Java工具,如果要进行下面的步骤必须安装Java。

首先下载Maven并且按照步骤将其安装,然後,在终端或命令提示符下输入:

mvn --version

它会打印出所安装的Maven的版本,例如:

Maven version: 2.0.8
Java version: 1.5.0_12
OS name: "windows 2003" version: "5.2" arch: "x86" Family: "windows"

根据网络设置或许会需要一些其他的设置。如需要的话请参看 Maven配置指南。

建立一个工程

在命令行上,运行如下的Maven目标(Goal):

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

如果Maven是全新安装的,第一次运行时会花费一些时间,因为Maven会下载最新的套件(插件包和其他文件)到本地,也有可能运行几次命令才能成功,因为远程服务器会在下载完毕前超时。不过,有许多方法来解决这个问题。

你可能注意到create目标(Goal)创建了一个与套件名(artifactId)同名的目录,现在切入这个目录。

cd my-app

在这个目录下会看到一个 标准工程结构

my-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java

src/main/java目录下包含工程的源代码,src/test/java目录下包含测试代码,pom.xml是项目的项目对象模型(Project Object Model),或简称POM。

项目对象模型(POM)

pom.xml是Maven工程的核心配置,这个文件包含了按照需要建立(build)工程时需要的大部分信息,POM文件非常庞大但可以简化,......

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</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的目标(Goal)archetype:create, 而且向这个目标传递了一些参数。前缀``archetype''是包含此目标的插件的名称。如果对Ant熟悉,你可以认为它和Ant中的"任务" (task)相似。这个目标创建了基于这个archetype的一个普通的工程。...。例如jboss-maven-plugin的作用是``处理一些 jboss的事务''。

You executed the Maven goal archetype:create, and passed in various parameters to that goal. The prefix archetype is the plugin that contains the goal. If you are familiar with Ant, you may concieve of this as similar to a task. This goal created a simple project based upon an archetype. Suffice it to say for now that a plugin is a collection of goals with a general common purpose. For example the jboss-maven-plugin, whose purpose is "deal with various jboss items".

编译这个工程

mvn package

命令行会打印出许多动作,结尾部分如下:

...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Thu Oct 05 21:16:04 CDT 2006
[INFO] Final Memory: 3M/6M
[INFO] ------------------------------------------------------------------------

和执行的第一个命令(archetype:create)不同,你可能注意到第二个命令只包含一个单词 -- package。与目标(Goal)不同,这是一个``阶段''(phase)。阶段是建立过程的生命周期中的一个步骤,建立过程包含一系列的步骤。当给出一个阶段时,Maven会顺序执行每个阶段直到到达给出的那个。例如,如果我们执行编译(compile)阶段,实际被执行的阶段是:

   1. validate
   2. generate-sources
   3. process-sources
   4. generate-resources
   5. process-resources
   6. compile

可以使用下面的命令测试刚刚编译并且打包的JAR文件:

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

它会立刻给出:

Hello World!

运行Maven工具

Maven包含的各个阶段

全部项目的列表会很长,这里列出的是需要执行的最常见的默认生命周期。

    * validate: 检验工程是否正确,是否给出了所有必要的信息。
    * compile: 编译工程的源代码
    * test: 使用合适的单元测试框架测试编译过的源代码。此处的测试步骤不需将编译得到的字节码打包和部署。
    * package: 将编译得到的字节码打包成可以用来将其发布(distribute)的格式,比如JAR。
    * integration-test: 如果需要将这个包放到特定环境中进行集成测试则处理并部署此包。
    * verify:  运行检验程序确认这个包可用且满足合格条件。
    * install: 将此包安装到本地套件库,以便其他工程可以在本地通过依赖关系使用此包。
    * deploy: 发布到集成或发布环境,拷贝最终完成的包到远程套件库,以便和其他开发者或工程共享。

还有两个Maven生命周期没有在上文列出,是:

    * clean: 清除被先前建立过程创建的套件。

    * site: 为这个工程建立网站文档。

阶段实际上是被映射到底层的目标上。每个阶段按照包的类型执行目标。例如,在工程的类型是JAR时执行jar:jar,执行war:war时的工程类型是 - 你已经猜到了 - 是WAR。

记住有趣的一点是阶段和目标会可以顺序执行。

mvn clean dependency:copy-dependencies package

这个命令会清理工程,拷贝依赖的内容,并且给这个工程打包(会执行所有的阶段直到到达package阶段)。

生成站点

Generating the Site

mvn site

这个阶段会基于工程的工程对象模型(POM)生成一个网站。可以查看到到目标或站点生成的文档。

结束语

我们希望这段简短的介绍能够使您对Maven的灵活性开始感兴趣,不过这是一篇十分简练的快速入门指南。现在您可以准备了解关於刚刚执行的那些动作的具体信息,请参看 Maven入门指南。

© 2002-2008 The Apache Software Foundation

原文链接: http://maven.apache.org/guides/g ... n-five-minutes.html
发表于 2009-8-7 10:54:45 | 显示全部楼层
还是觉得 make 更方便和自由一些。
回复 支持 反对

使用道具 举报

发表于 2009-8-7 15:30:55 | 显示全部楼层
除非用到linux平台本身的特性,使用make,对于j2ee应用ant和maven要简单的多
回复 支持 反对

使用道具 举报

发表于 2009-8-8 00:13:09 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2009-8-8 10:47:17 | 显示全部楼层
好书啊!两个期待:
一。pdf
二。翻译
回复 支持 反对

使用道具 举报

发表于 2009-8-14 16:02:21 | 显示全部楼层
pdf  和 中文翻译都有,上面网站都可以找到。
回复 支持 反对

使用道具 举报

发表于 2009-8-15 12:39:01 | 显示全部楼层
Post by hantsy;2016214
pdf  和 中文翻译都有,上面网站都可以找到。


找到了,无法言语了!

这是中文的地址和pdf下载的地方
http://www.sonatype.com/books/ma ... zh/public-book.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表