zoukankan      html  css  js  c++  java
  • Maven 简介

    Maven是一个基于Java的构建和依赖管理工具,它主要用来帮助实现项目的构建、测试、打包和部署。

    Maven 不仅是一个项目构建工具还是一个项目管理工具。它有约定的目录结构

    image

     

    POM

    POM(Project Object Model) 是Maven的基础。它是一个XML文件,包含了Maven用来build项目所需要的项目配置的信息。

    对于那些在pom中没有提到的信息,Maven就会使用默认值。例如Maven默认源代码在src/main/java中。因此Maven在最大程度上简化了项目build的过程。

    Super POM
    Super POM是Maven的默认POM。所有的POM都继承了super POM。也就是说,所有的POM中的信息都来自于Super POM,但在子POM中的配置信息会覆盖Super POM中的重复项。

     

    Maven 插件和仓库

    Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,仅仅定义了抽象的生命周期,所有这些任务都交给插件来完成的。每个插件都能完成至少一个任务,每个任务即是一个功能,将这些功能应用在构建过程的不同生命周期中。这样既能保证拿来即用,又能保证 maven 本身的繁杂和冗余。

     

    maven 能支持不同的生命周期,但是最常用的是默认的Maven生命周期 (default Maven lifecycle )。如果你没有对它进行任何的插件配置或者定制的话,那么命令 mvn package 会依次执行默认生命周期中直到包括 package 阶段前的所有阶段的插件目标:

    主要的生命周期如下:

     

    • validate,验证工程是否正确,所有需要的资源是否可用。
    • compile,编译项目的源代码。
    • test-compile,编译项目测试代码。
    • test,使用已编译的测试代码,测试已编译的源代码。
    • package,已发布的格式,如jar,将已编译的源代码打包。
    • integration-test,在集成测试可以运行的环境中处理和发布包。
    • verify,运行任何检查,验证包是否有效且达到质量标准。
    • install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
    • deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
    • generate-sources,产生应用需要的任何额外的源代码,如xdoclet。

    Maven库

    当第一次运行 maven 命令的时候,你需要 Internet 连接,因为它要从网上下载一些文件。那么它从哪里下载呢?它是从 maven 默认的远程库(http://repo1.maven.org/maven2) 下载的。这个远程库有 maven 的核心插件和可供下载的 jar 文件。

    但是不是所有的 jar 文件都是可以从默认的远程库下载的,比如说我们自己开发的项目。这个时候,有两个选择:要么在公司内部设置定制库,要么手动下载和安装所需的jar文件到本地库。

    本地库是指 maven 下载了插件或者 jar 文件后存放在本地机器上的拷贝。在 Linux 上,它的位置在 ~/.m2/repository,在 Windows XP 上,在 C:Documents and Settingsusername.m2 epository ,在 Windows 7 上,在 C:Usersusername.m2 epository。当 maven 查找需要的 jar 文件时,它会先在本地库中寻找,只有在找不到的情况下,才会去远程库中找。

     

    参考资料:

    Maven中的几个重要概念(三):POM
    http://blog.csdn.net/onlyqi/article/details/6820561

    Apache Maven 入门篇(下)
    http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-2-405568-zhs.html

  • 相关阅读:
    OK335x mksd.sh hacking
    Qt jsoncpp 对象拷贝、删除、函数调用 demo
    OK335xS 256M 512M nand flash make ubifs hacking
    Qt QScrollArea and layout in code
    JsonCpp Documentation
    Qt 4.8.5 jsoncpp lib
    Oracle数据库生成UUID
    freemarker得到数组的长度
    FreeMarker中if标签内的判断条件
    freemarker语法
  • 原文地址:https://www.cnblogs.com/ghj1976/p/4977430.html
Copyright © 2011-2022 走看看