Maven(一)简介和基本安装使用

简介


 

如今用于项目管理和自动化构建的东东用的比较多的,比如:

 

  • eclipse中用到的ant
  • 现今流行的android studio中用到的gradle

 

这里将介绍另一种工具——maven (也可以用来构建android项目)!

 

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理软件,如今越来越多的项目开始使用这种工具,大小项目都有。

主要功能可分为三类:

  • 项目自动化构建
  • 版本控制
  • 依赖管理

Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件。

 

如下是Maven的官网,可以看到是托管到apache下面的(不知道什么原因,我的firefox访问这个站点速度很慢...)

http://maven.apache.org/

 

下载安装


 

如图给出了下载位置(网址即为上述网址,笔者尝试打开这个页面时总是发现是一片空白,突然我按下F5刷新后...页面出来了)

(插一句, 注意maven的安装运行是需要Java环境的,确认系统已经正确下载配置了java runtime!)

下载解压后放置到合适的位置,里面的内容如下:

这个即为maven的根目录,bin存放了二进制文件,boot里面是一个类加载jar包,conf里面是一些配置用文件,lib是maven所以来的一些jar包。

随后将这个根目录配置到Path环境变量中,打开控制台,输入命令:mvn -v出现下面结果,就说明安装成功了~

D:\Work\moudle\maven\mavenapp1> mvn -v
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
Maven home: D:\Program Files (x86)\apache-maven-3.3.3\bin\..
Java version: 1.8.0_45, vendor: Oracle Corporation
Java home: D:\Program Files\Java\jdk1.8.0_45\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "dos"

 

创建项目和简单使用


这里以创建一个简单的java项目为例。

首次创建项目可以使用mvn archetype:generate命令(这实际上是一个maven插件),可以看到首次执行后会自动的下载很多依赖文件,这里需要等待片刻

 

 

这里实际上是在下载一个叫做maven-archetype-quickstart的插件,这个插件可以用来方面的新建maven项目(就好比是在eclipse中安装ADT方便创建android项目工程)

下载一段时间后会发现提示选择这个插件的版本:

Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6: 6

选择默认的即可。

 

随后到了要输入所要新建项目的信息时候了,根据提示会依次要求你输入下列信息:

Define value for property 'groupId': : com.company.maven01
Define value for property 'artifactId': : mavenapp1
Define value for property 'version':  1.0-SNAPSHOT: :
Define value for property 'package':  com.company.maven01: :
Confirm properties configuration:
groupId: com.company.maven01
artifactId: mavenapp1
version: 1.0-SNAPSHOT
package: com.company.maven01
 Y: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: D:\Work\moudle\maven
[INFO] Parameter: package, Value: com.company.maven01
[INFO] Parameter: groupId, Value: com.company.maven01
[INFO] Parameter: artifactId, Value: mavenapp1
[INFO] Parameter: packageName, Value: com.company.maven01
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: D:\Work\moudle\maven\mavenapp1
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18:12 min
[INFO] Finished at: 2015-08-04T14:46:23+08:00
[INFO] Final Memory: 14M/168M
[INFO] ------------------------------------------------------------------------

这里四个输入变量含义是:

  • groudId,可以看作为项目的包名
  • artifactId,可以看作为项目的模块名
  • version,版本号,这里maven-archetype-quickstart插件会自动分配一个默认的版本号(1.0-Snapshot),这里例子中直接回车用默认的即可
  • package,这里设置包名,maven-archetype-quickstart也会自动的将groupId作为默认的包名,直接回车即

下面我们进入执行命令所在的目录,发现maven-archetype-quickstart自动为我们创建了一个项目目录骨架:

根目录为一个src文件和一个pom.xml文件,src下面有main和test文件夹,main是放置项目代码的地方,test是放置测试代码的地方,通常在src下面还会有一个resource的文件夹,用来放置图片等资源文件。

文件夹结构描述
consumerBanking contains src folder and pom.xml
src/main/java contains java code files under the package structure (com/companyName/bank).
src/main/test contains test java code files under the package structure (com/companyName/bank).
src/main/resources it contains images/properties files (In above example, we need to create this structure manually).

同时还帮我们一个示例java文件和一个测试示例文件(用到了junit)

package com.company.maven01;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}
package com.company.maven01;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

/**
 * Unit test for simple App.
 */
public class AppTest 
    extends TestCase
{
    /**
     * Create the test case
     *
     * @param testName name of the test case
     */
    public AppTest( String testName )
    {
        super( testName );
    }

    /**
     * @return the suite of tests being tested
     */
    public static Test suite()
    {
        return new TestSuite( AppTest.class );
    }

    /**
     * Rigourous Test :-)
     */
    public void testApp()
    {
        assertTrue( true );
    }
}

 

在项目目录中,到控制台运行mvn compile即可编译(第一次运行这个命令会下载很多东西,需要等待片刻),发现下面这个结果,就表示编译通过了

[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\Work\moudle\maven\mavenapp1\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:09 min
[INFO] Finished at: 2015-08-04T15:05:03+08:00
[INFO] Final Memory: 16M/164M
[INFO] ------------------------------------------------------------------------

 

进入项目目录发现下面多了一个target文件夹

 

我们在运行下mvn test命令

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.company.maven01.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.226 s
[INFO] Finished at: 2015-08-04T15:13:53+08:00
[INFO] Final Memory: 10M/232M
[INFO] ------------------------------------------------------------------------

这里是在运行那个junit测试文件,可以发现测试通过。这个时候再回到刚才根目录,进入target文件夹,发现有很多目录,主要是存放了编译后的class文件和测试及项目管理报告等。

 

再执行一次命令mvn package (改命令即为打包)

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ mavenapp1 ---
[INFO] Building jar: D:\Work\moudle\maven\mavenapp1\target\mavenapp1-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.639 s
[INFO] Finished at: 2015-08-04T16:04:25+08:00
[INFO] Final Memory: 14M/233M
[INFO] ------------------------------------------------------------------------

这个时候再看target目录,又多出来了一个打包后的jar包,命令和之前配置的artifactId和version一致。最终target文件夹下面的内容为:

 

POM文件


 

根目录下有个pom.xml,这个即为项目对象模型文件,类似于ant构建方式中的build.xml。他是用来描述整个项目的,比如基础信息设置、依赖配置、构建配置等等,采用xml文件格式组织。

打开上述例子中的pom.xml文件,这里即为一个简单的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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.company.maven01</groupId>
  <artifactId>mavenapp1</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
  • modelVersion为使用的maven版本
  • groupId、artifactId、version的含义已经介绍过(参考上一节创建项目的地方)
  • packaging定义了打包方式,上述例子中即打包成Jar,也可以打包成war, ear等。当不定义packaging的时候,Maven 会使用默认值jar
  • dependencies配置了依赖冠以,这里引用了junit,也可以引用本地仓库中的其他项目

pom.xml文件的使用内容还是很多的,比如pom文件之间的复用(采用了继承、依赖、聚合等关系配置)、构建的设置、属性赋值(类似于gcc中makefile的常量定义)、配置开发者信息等等,后面后续会有详细的博客介绍。

 

posted @ 2015-08-04 15:29  soaringEveryday  阅读(1687)  评论(0编辑  收藏  举报