介绍:

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。它是个java工具,用于管理java工程。



安装:


要运行maven,需要装jdk,最好1.5及以上(不能仅装个jre)。然后去maven官网下载最新版的maven进行安装。


下面以windows xp系统上运行maven为例做个介绍:


1. 我这里下载的是apache-maven-3.0.4-bin.tar.gz


2. 解压,放入你要安装maven的目录,如这里解压后目录为:E:\Maven\apache-maven-3.0.4


M2_HOME为maven安装目录,这里为:E:\Maven\apache-maven-3.0.4


4.再设置用户环境变量M2为%M2_HOME%\bin


5.(可选)设置用户环境变量MAVEN_OPTS,来指定JVM属性设置,如可以设置为: -Xms256m -Xmx512m


6.在path用户环境变量中(如果没有path用户变量,请新增一个),加入maven的bin目录,以便在命令行中能直接输入命令来调用maven,而不用输入繁琐的绝对路径。这里加上:%M2%


7.确保jdk配置正确


8.打开dos窗口,输入:mvn --versoin,如果输入maven的版本信息,表示安装成功。




如果没有问题,则maven成功安装,无需再做配置了。如果必须个性化配置,可以通过安装目录下的conf/settings.xml文件来配置。




创建一个工程:


1. 在本地建一个目录,用来存放该工程。这里创建目录e:\Maven\MavenTeset。


2. 打开cmd,进入到该目录,然后运行命令:


mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=fals



注:刚装完maven,第一次运行上面命令的时候需要一定的时间,因为maven会下载一些插件和其他文件到你本地的repository(这里我的为:c:\Documents and Settings\Administrator\.m2\repository\)。上面的命令可能需要运行多次,直到运行成功(有提示:build success等),因为下载有时候会报服务器超时,这个时候必须再运行一次上面的命令。



3. 第2步运行成功后,会在当前目录e:\Maven\MavenTeset下自动建立一个my-app目录,和上面命令中artifactId参数指定的名字相同。
4. 进入目录 cd my-app,你会发现有如下的工程结构:
my-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.javasrc/main/java目录包含工程的源文件,src/test/java目录包含工程的测试代码。pom.xml是该工程的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/maven-v4_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>my-app</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>
第2步执行的命令做了些什么呢?
它执行了maven的目标archetype:generate,并且传入了很多参数。这里archetype是一个插件,它包含了很多目标(goal),generate就是其中的一个。插件(plugin)其实就相当于目标的集合(collection)。在maven中,还有一个叫做phase的东西,maven的构建生命周期(build lifecycle)里包含很多phase,每个phase又包含有很多目标(goal)。phase后文还会提到。
这里的generate目标是做什么的呢?就如上面看到的工程结构,它生成工程的源码和测试代码,并且生成了相应的pom.xml。
5. 接下来,构建该工程。进入my-app目录,然后执行:mvn package。同样需要等待一段时间,它需要下载该工程依赖的一些库,如pom.xml中dependency指定的junit库。
6. 构建完成之后,在当前目录下,会生成target文件夹,该目录下有一个my-app-1.0-SNAPSHOT.jar包,即该工程的打包文件。
第5步的命令mvn package中的package就是一个phase,它是构建生命周期(build lifecycle)中的一个步骤,构建生命周期包含很多步骤,可以看成步骤的集合,该集合中的步骤是有一定顺序的。当我们通过mvn命令给定一个phase的时候,maven会按顺序执行集合(build lifecycle)中phase,一直到mvn指定的phase为止(包含指定的phase)。比如,执行mvn compile,这maven会执行如下phase:
validate
 
generate-sources
 
process-sources
 
generate-resources
 
process-resources
 
compile
 
7. 现在,可以测试一下第6步编译、打包生成的jar包了。在my-app目录下执行如下命令:
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
然后会输出:Hello World!




再对phase做个介绍。
在maven的构建生命周期中,主要有如下几个默认phase:
  • validate: validate the project is correct and all necessary information is available
  • compile: compile the source code of the project
  • test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
  • package: take the compiled code and package it in its distributable format, such as a JAR.
  • integration-test: process and deploy the package if necessary into an environment where integration tests can be run
  • verify: run any checks to verify the package is valid and meets quality criteria
  • install: install the package into the local repository, for use as a dependency in other projects locally
  • deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

phase映射了很多目标,每个phase具体执行哪些目标,是由工程的打包类型(package type)决定的。如上面的工程的打包类型是jar(<packaging>jar</packaging>),则执行jar对应的目标,如果是war,则执行war对应的目标。


maven还有两个phase上面没有列出,它们是:


  • clean: cleans up artifacts created by prior builds
  • site: generates site documentation for this project

8. 最后,我们执行一下site phase,命令:mvn site。 也得等一段时间


执行完后,会在target下生成目录site,进去打开index.html,有点意外啊,看起来相当不错~
貌似写的有点混乱,哎。。。逐渐提高吧