`
bit1129
  • 浏览: 1052601 次
  • 性别: 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实战视频教程(共14集).txt

    教程名称:Maven3实战视频教程(14集) 课程目录: Maven3_01_maven概览 Maven3_02_maven安装的注意事项 Maven3_03_在eclipse中建立简单的项目 Maven3_04_maven的依赖特性 Ma 资源太大,传百度网盘了,链接在附件中...

    Maven学习精华教程-电子书

    此电子书详细介绍了项目自动化构建工具Maven的使用,内容清晰简洁明了,易于阅读、理解! 目录: Maven概念 Maven安装 Maven项目 Maven命令行 pom.xml概览 settings.xml概览 坐标和依赖 聚合与继承 插件_概念与...

    GeoServer开发手册系列

    OWS服务概览 24 实现一个简单的OWS服务 24 建立 25 创建插件 27 试一试 30 REST服务 34 简介 34 RESTful服务实现 35 基于Maps的Restful服务实现 43 基于反射的Restful服务实现 49 GeoServer中的Wicket开发 55 Web...

    校园订餐系统,基于javaweb+SSM+maven实现.zip

    一、内容概览 这个JavaWeb“系统管理”项目资源包,是专为对JavaWeb开发有兴趣的学习者设计的。它包含了从基础到高级的完整知识体系,以及实际项目操作的全部流程。具体内容包括: 项目背景与目标:详细介绍了...

    Springboot + Mybatis +maven 火车订票系统.zip

    内容概览 项目设置和初始化 控制器设计和实现 数据持久化与数据库集成 安全性和身份验证 性能优化和监控 部署和生产环境考虑 现在,是时候让您的Java技能得到充分发挥,并掌握SpringBoot的魔法了!这个项目将带领您...

    Datavines 是一站式开源数据可观测性平台,提供元数据管理、数据概览报告、数据质量管理,数据分布查询、数据趋势洞察等核心能

    Datavines 是一站式开源数据可观测性平台,提供元数据管理、数据概览报告、数据质量管理,数据分布查询、数据趋势洞察等核心能力,致力于帮助用户全面地了解和掌管数据,让您做到心中有数。 架构设计 ...

    SpringBoot+adminlte+maven的物流公司管理系统 .zip

    内容概览 项目设置和初始化 控制器设计和实现 数据持久化与数据库集成 安全性和身份验证 性能优化和监控 部署和生产环境考虑 现在,是时候让您的Java技能得到充分发挥,并掌握SpringBoot的魔法了!这个项目将带领您...

    Byron4j#CookBook#0-javassist编程指南概览1

    引入javassist的Maven依赖使用javassist进行编程javassist官网:官方指南1.读、写字节码

    springboot开发的概要介绍与分析

    以下是一份关于Spring Boot开发的资源概览,旨在为不同层次的开发者提供学习路径和实用资源。 ### 入门指南 - **官方文档**:Spring Boot的官方文档是学习之旅的起点。它提供了详尽的指南,从安装到构建第一个应用...

    MF00929-Java学籍管理系统源码.zip

    Java学籍管理系统源码带本地搭建教程 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发语言 : JAVA ...系统概览:专业数量、班级数量、课程数量、老师数量、开课数量、学生数量

    wechatpay-apache-httpclient:微信支付 APIv3 Apache HttpClient装饰器(decorator)

    概览 的扩展,实现了请求签名的生成和应答签名的验证。 如果你是使用Apache HttpClient的商户开发者,可以使用它构造HttpClient。得到的HttpClient在执行请求时将自动携带身份认证信息,并检查应答的微信支付签名。 ...

    AndroidFloatLabel:带有实现浮动标签模式的自定义视图的库项目

    快速概览 入门 下载源代码以将其用作库项目或直接从依赖项中的 Maven Central 使用它。 例如: dependencies { compile 'com.iangclifton.android:floatlabel:1.0.4' } 对于大多数用途,您可以简单地在 XML 布局...

    FeedCombiner:每个组合提要都有指向其余端点的超链接,以 HTML、JSON 或 ATOM 格式返回其提要

    ####Compilation FeedCombiner 是标准的 webapp maven 项目(在 Apache Maven 3.2.1、Oracle Java 1.8 和 1.7 上测试)。 解压后只需在与 pom.xml 相同的文件夹中运行: mvn install 成功构建和测试完成后,打包的...

    docker-jenkins:用于运行 Jenkins、Selenium Headless 的 Docker 脚本

    我们创建一个安装了 node 和 maven 的构建从映像 我们收集一份 Jenkins Docker 镜像的副本 我们使用 Selenium Docker 镜像建立一个 Selenium 环境 启用 VNC 访问的 Chrome、Firefox 的“节点”(密码:“秘密”) ...

    1.闲一品交易平台SpringBoot项目-闲一品交易平台(可运行源码+开发说明+数据库+LW)

    闲一品交易平台功能概述 ...构建工具: Maven 3.3.9 质量保证: 所有代码经过严格调试和测试,确保稳定运行。 适用人群: 适合计算机科学、通信、人工智能、自动化等相关专业的学生、教师和从业者。 完美适用于

    基于 SSM-VUE 前后端分离的 CRUD+源代码+文档说明

    ## 一、项目概览 ### 相关技术 #### 前端 - 开发框架:Vue3、Axios、Element Plus - 脚手架:@Vue/cli - 依赖管理: npm - 开发工具:VSCode 、Chrome #### 后端 - 开发框架:Spring、SpringMVC、Mybatis - ...

    jBPM5 用户指南-中文

    1.2 概览 7 1.3 核心引擎 9 1.4 Eclipse编辑器 9 1.5 基于Web的设计器 10 1.6 jBPM控制台 11 1.7 文档结构 12 第二章 获得开始 13 2.1 下载 13 2.2 获得开始 13 2.3 社区 14 2.4 资源 14 2.41许可证 14 2.42 源代码 ...

    平安银行java开发笔试题-qbit-extensions:QBit扩展

    快速概览 Java 微服务库。 QBit 是一个用于构建微服务的React式编程库 - JSON、HTTP、WebSocket 和 REST。 QBit 使用React式编程来构建弹性 REST 和基于 WebSockets 的云友好型 Web 服务。 SOA 为移动和云而发展。 ...

    JBPM5 用户指南

    1.2 概览 2 1.3 核心引擎 3 1.4 Eclipse编辑器 4 1.5 基于Web的设计器 5 1.6 jBPM控制台 5 1.7 文档结构 6 第二章 获得开始 7 2.1 下载 7 2.2 获得开始 7 2.3 社区 8 2.4 资源 8 2.41许可证 8 2.42 源代码 9 2.4.3 ...

Global site tag (gtag.js) - Google Analytics