zoukankan      html  css  js  c++  java
  • Maven 快速入门

    官网:https://maven.apache.org/index.html
    POM 参考文档: https://maven.apache.org/pom.html
    Settings 参考文档: https://maven.apache.org/settings.html

    一、简介

    Maven 是一个用于构建/管理任何基于Java项目的工具,其本身也是基于Java的 因此需要Java环境。其最初是为了简化 Jakarta Turbine 项目的构建而生。

    其主要处理以下关心的领域:

    1. 使构建过程更简单:使用 Maven 并不能消除对底层机制的了解需要,但仍能使开发者规避很多细节。
    2. 提供统一的构建系统:Maven 使用 POM(project object model,项目对象模型)和插件集构建项目。一旦你熟悉一个 Maven 项目,则会知道所有 Maven 项目的构建。
    3. 提供高质量的项目信息:Maven 提供了有用的项目信息,一部分来自 POM,一部分生成自源码。(注:这部分不会太常用到,属于 reporting 模块,即通过调用 "mvn site",运行一个 Server,在网页上展示项目相关信息报告,如图所示。详情可参考: Apache Maven Site Plugin, Configuring Reports
    4. 提供最佳的项目开发指导:Maven 意在收集当前最佳实践开发原则,并使其变得更简单以指导项目方向。
      例如:
      • 目前单元测试这一最佳实践作为了指导,单元测试的规范、执行、报告在 Maven 中作为了通常构建声明周期的一部分。
      • Maven 还协助项目工作流(workflow),例如发布(release)和问题管理(issue management)。
      • Maven 在项目目录结构的布局上也给出了一些指导建议,一旦你熟悉了这布局,可以很容易游览其他Maven项目。
        Maven 在项目布局上较为坚持,虽然 Maven 设计为了灵活适应不同项目的需要,但它不可能在不影响目标的情况下满足每一种不寻常结构的项目。因此若不能被重新组织,可能不得不放弃一些特性或Maven使用。

    二、安装

    1. 系统要求:
      • Maven 3.3+ 需要 JDK1.7
      • JAVA_HOME 环境变量确保指向了JDK目录
    2. 下载/安装:
      2.1 Maven 官方提供现成 binary 分发: https://maven.apache.org/download.cgi
      2.2 解压后将 bin 目录添加进 PATH 即可
      image

    三、简单使用

    1. 利用原型(Archetype)生成简易项目结构:
      1.1 在 PowerShell中执行:mvn archetype:generate "-DgroupId=com.mycompany.app" "-DartifactId=my-app" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DarchetypeVersion=1.4" "-DinteractiveMode=false"
      1.2 修改"pom.xml"添加以下内容,声明 Java源码版本信息
      <properties>
      	<maven.compiler.source>11</maven.compiler.source>
      	<maven.compiler.target>11</maven.compiler.target>
      </properties>
      
    2. 进入目录,并打包成 jar
      cd maven-sample
      mvn package  //mvn会自动下载打包所需组件
      
    3. 执行测试
      java -cp . argetmaven-sample-1.0-SNAPSHOT.jar top.simpleito.demo.App

    四、主要模块/知识

    1. 标准目录布局(Standard Directory Layout)

    https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
    注:

    • 标准目录布局同时也是用 Maven 构建的默认值,比如哪里是java源码,测试目录在哪,输出目录是什么等等。
    • 以下有些描述暂时觉得模糊也没关系,一些部分并不常见 笔者也没用过,像 it / filters / site / assembly等,临时有大致概念即可。
    • 从官方示例看,java 源码包结构只要求和 groupId 相同即可,而不要求加一层 artifectId 的父包。但实际项目各种都有
    maven-project
        ├───pom.xml  项目描述文件,定义在生命周期中所需的依赖和所需模块等等
        ├───README.txt  项目说明
        ├───NOTICE.txt  项目中使用第三方库的资料
        ├───LICENSE.txt  许可文件
        └───src  包含构建项目所需所有资料,site等等
            ├───main  最重要的目录,所有工件(artifect)都应出现在这里
            │   ├───java  工件Java源码
            │   ├───resources  配置及资源等文件
            │   ├───filters  包含在构建阶段将值注入到resources目录下配置属性的文件
            │   └───webapp  对于web应用,包含诸如JS/CSS/HTML等资源文件
            ├───test  所有测试代码及资源
            │   ├───java
            │   ├───resources
            │   └───filters
            ├───it  通常是用于 Maven Failsafe Plugin 的集成测试
            ├───site  使用 Maven Site Plugin(https://maven.apache.org/plugins/maven-site-plugin/index.html) 创建的site文档
            └───assembly  二进制打包装配配置,一般也不常用适用 Apache Maven Assembly Plugin
        └───target  用于容纳 build 的所有输出
    

    2. POM(Project Object Model,项目对象模型)

    https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
    POM 是 Maven 中的基本工作单元,它是一个 XML 文件,包含了"项目有关信息"和"配置Maven构建项目的细节"。
    当执行一个任务时,Maven 会在当前目录寻找 POM 文件,从而读取所需的配置信息。
    POM 中可以指定许多信息,包括:

    • 依赖(dependencies)、插件(plugins) 或 可被执行的目标(goal)、构建配置(profiles)等。
    • 以及关于项目的本身的信息,如 版本(version)、说明(description)、开发人员(developers)等

    需注意的是:POM 中的<groupid>:<artifactId>:<version>构成了该工件的完全限定名
    关于 POM、Super POM、最小POM等更多信息参考:Maven POM 详解

    3. Settings(Maven本身设置)

    https://maven.apache.org/settings.html
    settings.xml 包含对 Maven 自身的配置,不应绑定到任何特定项目分发给用户。主要包含:本地储存库,代理,身份验证信息等等。

    该配置文件可能存在两个位置:

    • 全局的设置:${maven.home}/conf/settings.xml
    • 用户级设置:${user.home}/.m2/settings.xml 【默认情况下可能不存在,可copy全局过来修改】

    若都存在,则内容将被合并作用。优先级:用户级 > 全局
    配置详情参考:Maven Settings

    4.Build Lifecycle(构建生命周期)

    https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
    Maven 基于生命周期的概念,意味着构建(build)和分发(distributing)特定工件的过程得以清晰定义,意味着只需学习一小组命令,即可构建任何 Maven 项目。

    有三种内置构建生命周期(build lifecycle):默认(default)、清理(clean)、site
    需注意:

    1. 构建生命周期由构建阶段(build phases)组成,每个阶段都是生命周期中的一个步骤(stage),
    2. Maven 命令格式:mvn [options] [<goal(s)>] [<phase(s)>],可按需执行某个 phase
    3. build phase 将按顺序执行,例如若执行 mvn install,将会执行在此之前的所有 phase
    4. build phase 又是由声明插件所引入的插件目标(plugin goals)组成的。
      一个 plugin goal 代表一个特定的任务(比phase更精细),它可能被绑定到零个或多各 build phase,不绑定的 plugin goal 可在 build lifecycle 之外直接自行执行

    以 default 声明周期为例,主要包含以下 phase:完整的请参考 Lifecycle Reference

    • validate:验证项目是否正确,所有必要信息是否提供
    • compile:编译项目源码
    • test:使用合适的单元测试框架测试编译后的源码。这些测试代码不要求被打包或部署
    • package:将编译后的代码打包为分发格式,例如 JAR
    • verify:运行继承测试的所有检查,以确保符合标准
    • install:将 package 安装到 Locale Repository(本地仓储),用作其他项目依赖
    • deploy:将最终 package 复制到 Remote Repository(远程仓储)

    附/参考:

    本文为博主原创文章,如需转载请注明链接出处! 如有帮助到你,还请留言支持一下,谢谢:) 若有问题,也欢迎讨论指正。
  • 相关阅读:
    doT.js——前端javascript模板引擎问题备忘录
    (转)regex类(个人理解)
    ajax提交表单、ajax实现文件上传
    SQL添加表字段
    Elasticsearch使用总结
    有一张表里面有上百万的数据,在做查询的时候,如何优化?从数据库端,java端和查询语句上回答
    sql语句的字段转成Date
    Mybatis 示例之 foreach
    Eclipse不编译解决方案
    Java使用RSA加密解密及签名校验
  • 原文地址:https://www.cnblogs.com/simpleito/p/15118332.html
Copyright © 2011-2022 走看看