`
bit1129
  • 浏览: 1067647 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Maven一]Maven概览

 
阅读更多

 什么是Maven

  1. Maven这个单词意为知识的积累,最早在Jakata Turbine项目中它开始被用来试图简化构建过程,Maven是一种很方便的发布项目信息的方式,以及一种在多个项目中共享JAR的方式。
  2. Maven是项目管理工具,它为项目构建、测试、打包、部署定义了一个标准的生命周期。。
  3. Maven基于一个 通用的软件对象模型(Project Object Model),也就是POM。
  4. Maven项目属于Apache软件基金会的一个顶级项目http://maven.apache.org/。Apache的很多项目都是基于Maven来管理的。同时,越来越多的项目和产品使用Maven作为他们项目管理的基础。它变得易于在项目和构建系统建立关系,并且在这个关系之上导航和做报告。
  5. Maven的规范和中央仓库为项目定义了一种全新的命名系统。使用Maven可以很容易的加入其他的依赖项,并发布你自己的组件。

Maven体系结构

图片来源:http://zc985552943.iteye.com/blog/2090260

 

Maven安装

下载Maven

  1. 最新版本3.2.2,http://maven.apache.org/download.cgi
  2. 解压
  3. sudo vim /etc/profile
  4. 在最后添加系统变量M2_HOME
    export M2_HOME=/home/tom/devsoftware/apache-maven-3.2.2
    export PATH=$PATH:$M2_HOME/bin
     
  5. source /etc/profile
  6. 验证安装成功

在用户根目录下输入mvn v,察看Maven是否安装成功

Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T21:51:42+08:00)
Maven home: /home/tom/devsoftware/apache-maven-3.2.2
Java version: 1.7.0_55, vendor: Oracle Corporation
Java home: /software/devsoftware/jdk1.7.0_55/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-39-generic", arch: "amd64", family: "unix"

 

 Maven版本的Hello World

  1. 在~/learnmaven/maven-ch01中新建空的pom.xml,运行mvn compile,会报错,提示pom.xml文件必需的内容缺失
  2. 在pom.xml添加必需的xml内容,
    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    
        <!--mandatory element in the project-->
        <modelVersion>4.0.0</modelVersion>
    
        <!--mandatory 3 elements in the project,这是确定唯一Maven模块的三元组-->
        <groupId>LearnMaven</groupId>
        <artifactId>LearnMaven</artifactId>
        <version>1.0</version>
    
    </project>
     project的四个子元素,modelVersion,groupId,artifactId和version是四个必需的元素,运行mvn compile之后,得到的结果是
    [INFO] Scanning for projects...
    [INFO]                                                                         
    [INFO] ------------------------------------------------------------------------
    [INFO] Building LearnMaven 1.0
    [INFO] ------------------------------------------------------------------------
    [INFO] 
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ LearnMaven ---
    [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
    [INFO] skip non existing resourceDirectory /home/tom/development/learnmaven/maven-ch01/src/main/resources
    [INFO] 
    [INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ LearnMaven ---
    [INFO] No sources to compile
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 2.707 s
    [INFO] Finished at: 2014-08-02T00:22:44+08:00
    [INFO] Final Memory: 6M/106M
    [INFO] ------------------------------------------------------------------------
     
  3. ~/learnmaven/maven-ch01目录下创建Maven的标准Maven模块的目录结构

        mkdir -p src/main/java

        mkdir -p src/main/resources

        mkdir  -p src/test/java

  4. 在 src/main/java目录执行命令mkdir -p com/tom

      在 src/test/java目录执行命令mkdir -p com/tom

  5. 在com/tom目录下创建一个Java类

package com.tom;
public class HelloMaven {
    public String hi(String name){
        return "Hi " + name + ",welcome to the Maven world";
    }
}

 6.回到~/learnmaven/maven-ch01目录执行命令mvn compile,得到如下输出,说明HelloMaven已经编译成功,编译的目标路径是target/classes

 

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building LearnMaven 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ LearnMaven ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ LearnMaven ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to /home/tom/development/learnmaven/maven-ch01/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.928 s
[INFO] Finished at: 2014-08-02T00:40:23+08:00
[INFO] Final Memory: 9M/107M
[INFO] -----------------------------------------------------------------------

 察看target/classes目录,可以发现com/tom/HelloMaven.classes

 

 7. 在src/test/java/com/tom编写HelloMaven的单元测试类

 

package com.tom;

import org.junit.Assert;
import org.junit.Test;

public class HelloMavenTest {

    @Test
    public void testHi() {
        String name = "tom";
        HelloMaven hm = new HelloMaven();
        Assert.assertEquals("Hi tom,welcome to the Maven world",hm.hi(name));
    }

}

 

 8.为pom.xml添加junit4依赖,pom.xml为

 

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <!--mandatory element in the project-->
    <modelVersion>4.0.0</modelVersion>

    <!--mandatory 3 elements in the project-->
    <groupId>LearnMaven</groupId>
    <artifactId>LearnMaven-ch01</artifactId>
    <version>1.0</version>

    <dependencies>
        <!--JUnit 4.11-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>

</project>

 

9.在回到~/learnmaven/maven-ch01目录执行命令mvn compile test,看到测试代码编译并且执行,

 

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.tom.HelloMavenTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.094 sec

Results :

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

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.853 s
[INFO] Finished at: 2014-08-02T01:25:38+08:00
[INFO] Final Memory: 17M/170M
[INFO] ------------------------------------------------------------------------

 

结果显示:测试用例成功执行,并且在target下创建了surefire-reports目录,在这个目录中创建了关于测试结果的信息文件

 

Maven模块依赖

1.在Maven Hello World的基础上,重新创建一个Maven模块,LearnMavenCh02,创建Maven的标准目录结构src/main/java和src/test/java等

2.在src/main/java/com/tom目录下,新建一个Java类,这个类依赖于Maven HelloWorld的HelloMaven,代码:

 

 

 

package com.tom;
public class HelloMavenCh02 {
    public String hi(String name){
        return new HelloMaven().hi(name);
    }
}

 

 因为LearnMaven02模块依赖于LearnMaven01模块,因此,我们需要将对LearnMaven01模块的依赖加入到LearnMaven02模块中,pom文件的内容如下

 

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <!--mandatory element in the project-->
    <modelVersion>4.0.0</modelVersion>

    <!--mandatory 3 elements in the project-->
    <groupId>LearnMaven</groupId>
    <artifactId>LearnMaven-ch02</artifactId>
    <version>1.0</version>

    <dependencies>
        <!--JUnit 4.11-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <dependency>
            <groupId>LearnMaven</groupId>
            <artifactId>LearnMaven-ch01</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>


</project

 

 3.执行命令mvn compile,报错,报错信息是

[ERROR] Failed to execute goal on project LearnMaven-ch02: Could not resolve dependencies for project LearnMaven:LearnMaven-ch02:jar:1.0: Failure to find LearnMaven:LearnMaven-ch01:jar:1.0 in http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced -> [Help 1]

意思是在中央仓库找不到LearnMaven-ch01,原因是我们还没有将LearnMaven-ch01放到本地仓库中

 

4.对LearnMaven01模块执行mvn install命令,将LearnMaven01模块添加到本地仓库.在LearnMaven01模块的~/development/learnmaven/maven-ch01目录执行mvn install,可以看到LearnMaven-ch01模块已经添加到本地仓库中,本地仓库路径~/.m2/repository/LearnMaven/LearnMaven-ch01/1.0/LearnMaven-ch01-1.0.jar

 

5.回到~/development/learnmaven/maven-ch02目录执行mvn compile发现LearnMaven-ch02模块编译成功

 

 

仓库

 

1.在pom.xml中定义的dependency,当查找这些依赖的jar包时候,首先从本地仓库中,然后再到全球的中央Maven库中下载,比如http://mvnrepository.com/中查找下载

2. 本地仓库~/.m2/repository

    执行mvn install是将Maven模块打包后发布到本地仓库中,本地仓库的路径是在M2_HOME/conf/settings.xml中指定,

  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

 

  

 3. 中央仓库,默认的配置是在$M2_HOME/lib/maven-settings-builder-3.2.2.jar包的pom-4.0.0.xml中,

 <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

 

  • 大小: 197.4 KB
分享到:
评论

相关推荐

    Maven3实战视频教程(14集)

    Maven3_01_maven概览 Maven3_02_maven安装的注意事项 Maven3_03_在eclipse中建立简单的项目 Maven3_04_maven的依赖特性 Maven3_05_maven的聚合和继承 Maven3_06_复习maven的基本内容 Maven3_07_nexus的介绍和安装 ...

    Maven3.5~3.6.3各版本下载

    #### Maven3.5至3.6.3版本概览 Maven 3.x系列是当前Maven的主要版本分支,其中3.5到3.6.3这几个版本主要集中在性能优化、错误修复及新功能添加等方面。这些版本之间的差异虽然不大,但每个版本都有其独特的改进点。 ...

    maven 安装配置手册

    #### 一、Maven概览 Maven是一个项目管理和综合工具,主要用于Java项目。它的设计理念是“约定优于配置”,即通过预设的规则和标准来减少配置工作量,使开发者能够更加专注于业务逻辑而不是构建过程。 **1.1 Maven...

    maven快速培训PPT

    **Maven快速培训PPT概览** Maven是一个在Java开发领域广泛应用的项目管理和构建工具。它的核心功能包括项目对象模型(Project Object Model)、依赖管理、项目生命周期和插件等,旨在简化项目的构建过程,提高开发...

    maven 权威指南中文版

    ### Maven权威指南中文版知识点概览 #### 一、Maven概述 **1.1 Maven是什么?** Maven被广泛认为是一种项目管理和构建自动化工具,主要用于Java项目的开发。Maven的核心价值在于它不仅是一个简单的构建工具,如Ant...

    Maven权威指南中文版(完整)

    ### Maven权威指南中文版知识点概览 #### 一、引言与Maven概念 - **Maven概述**:Maven是一种项目管理和理解工具,旨在通过一套标准流程来简化项目的构建过程。 - **约定优于配置(Convention Over Configuration)...

    Maven The Complete Reference

    ### Maven 完整参考知识点概览 #### 一、引言与 Maven 概念 **1.1 Maven 是什么?** Maven 是一个项目管理和理解工具。它包含了一个项目对象模型(POM),一组标准集合,一个项目生命周期,一个依赖管理系统以及其他...

    maven-definitive-guide.pdf

    ### Maven Definitive Guide知识点概览 #### 一、引言 《Maven Definitive Guide》是一本全面介绍Apache Maven构建工具的书籍,由Tim O'Brien、John Casey、Brian Fox、Bruce Snyder、Jason Van Zyl及Eric Redmond...

    maven - maven tutorial

    ### Maven - Maven 教程概览 #### 一、Apache Maven —— 概述 **1.1 什么是 Maven** Apache Maven 是一个基于项目对象模型(Project Object Model, POM)的软件项目管理和理解工具。它能够从一个中央信息源管理...

    maven2详细教程

    ### Maven 2 概览 Maven 2的核心功能在于它的项目对象模型(Project Object Model,简称POM)。POM是一个XML文件,包含了项目的基本信息、依赖关系、构建过程和其他配置细节。Maven使用POM来理解项目的构建过程,并...

    maven2详细教程.doc

    **Maven 2 概览** Maven 2 的设计理念是理解项目的一般构建方式,并通过内置的项目知识简化构建过程。它内含的依赖管理系统能够处理项目之间的依赖关系,确保正确版本的库被用于构建。此外,Maven 2 提供了一个标准...

    maven definitive guide

    ### Maven Definitive Guide知识点概览 #### 一、Maven简介与定义 - **Maven是什么?**:Maven不仅是一种构建工具,更是一种项目管理工具。它超越了传统构建工具(如Ant)仅专注于预处理、编译、打包、测试和分发...

Global site tag (gtag.js) - Google Analytics