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

Maven初识


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

  • eclipse中用到的ant

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

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


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

主要功能可分为三类:

  • 项目自动化构建

  • 版本控制

  • 依赖管理

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

 

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

http://maven.apache.org/

Maven下载和安装配置


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

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



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

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

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

<span style="font-size:12px;">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"</span>

创建Maven项目和简单命令


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

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


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

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

<span style="font-size:12px;">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</span>
选择默认的即可。


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

<span style="font-size:12px;">Define value for property '<span style="color:#CC0000;">groupId</span>': : com.company.maven01
Define value for property '<span style="color:#CC0000;">artifactId</span>': : mavenapp1
Define value for property '<span style="color:#CC0000;">version</span>':  1.0-SNAPSHOT: :
Define value for property '<span style="color:#CC0000;">package</span>':  com.company.maven01: :
Confirm properties configuration:
<span style="color:#CC0000;">groupId</span>: com.company.maven01
<span style="color:#CC0000;">artifactId</span>: mavenapp1
<span style="color:#CC0000;">version</span>: 1.0-SNAPSHOT
<span style="color:#CC0000;">package</span>: 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] ------------------------------------------------------------------------</span>

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

  • groudId,可以看作为项目的包名

  • artifactId,可以看作为项目的模块名

  • version,版本号,这里maven-archetype-quickstart插件会自动分配一个默认的版本号(1.0-Snapshot),这里例子中直接回车用默认的即可

  • package,这里设置包名,maven-archetype-quickstart也会自动的将groupId作为默认的包名,直接回车即

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


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

<span style="font-size:12px;">package com.company.maven01;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}</span>

<span style="font-size:12px;">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 );
    }
}</span>


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

<span style="font-size:12px;">[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] ------------------------------------------------------------------------</span>

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


我们再运行下mvn test命令,得到如下结果

<span style="font-size:12px;">-------------------------------------------------------
 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] ------------------------------------------------------------------------</span>

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

 

再执行一次命令mvn package (该命令即为打包操作)

<span style="font-size:12px;">[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] ------------------------------------------------------------------------</span>

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


POM.xml


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

打开上述例子中的pom.xml文件,这里即为一个典型而简单的pom.xml的结构:

<span style="font-size:12px;"><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></span>

  • modelVersion为使用的maven版本

  • groupId、artifactId、version的含义已经介绍过(参考上一节创建项目的地方)

  • packaging定义了打包方式,上述例子中即打包成Jar,也可以打包成war, ear等。当不定义packaging的时候,Maven 会使用默认值jar

  • dependencies配置了依赖冠以,这里引用了junit,也可以引用本地仓库中的其他项目

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值