软件是一个工程

我们在日常生活常能听到工程这个词,像桥梁工程、道路工程、南水北调工程等等。

工程说简单点就是各个行业的从业人员通过总结规律或者方法,以最短的时间和人力、物力来做出高效可靠的东西。我们也就能理解桥梁工程,其实就是人们通过经验的总结和各种研究得出来的、用来修建桥梁时所采用的高效的方法,当然这种方法是可复用的。我们将这种作工程的思想应用到软件上,于是就产生了—软件工程。

软件工程:为了能够实现软件的流水线式生产,在设计和构建软件时能够有一种规范和工程化的方法,人们便提出了软件工程概念。

Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。Maven这个单词的本意是:专家,内行,读音是['meɪv(ə)n]或['mevn]。

Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具,Maven通过一小段描述信息可以整合多个项目之间的引用关系,提供规范的管理各个常用jar包及其各个版本,并且可以自动下载和引入项目中。

本课程详细介绍了Maven的高级操作:继承、聚合、多模块项目管理等方面的内容方方面面,是一线开发必不可少的内容

在线观看:https://www.bilibili.com/video/BV1dp4y1Q7Hf

资料下载: Maven视频教程全套免费下载【适合菜鸟入门】 - 动力节点 (bjpowernode.com)

上面的内容做个日常生活的类比,做道菜就是一个工程。今天心情好,想吃红烧肉,自动动手做:

  1. 想买什么猪的那个位置的肉,黑猪肉,土猪肉等,使用冰糖还是绵白糖,用什么牌子的酱油等

  2. 到菜市场购买各种原料。

  3. 准备材料,洗肉,切块,花椒,大料等

  4. 开始做了,肉下锅炖煮,不同时间加入花椒,大料,冰糖,酱油

  5. 炖煮一段时间后,看肉是否熟透,尝试口味,是不是咸了等等

  6. 做好了,开始吃了

  7. 需要刷碗,倒垃圾

这些工作从头做到尾步骤非常繁琐,每个步骤都是费时费力的。所以才出现净菜,半成品菜,拿回家直接做可以了,只做 6,7 步骤就可以 。

软件开发需要编译代码—>开发人员自己测试代码—>把代码打包—>部署项目到测试服务器—>测试人员测试功能—>测试测试出bug

开发人员需要修改bug—>开发人员自己测试代码—>把代码打包—>部署项目到测试服务器—>测试人员测试功能—>直到符合功能要求。

上述过程需要重复多次,大型项目中构建项目比较复杂,有很多的配置文件,jar 文件,多个子项目等等。都用人力完成费时费力,效率比较低。maven 可以让我们从上面的工作中解脱出来。

Maven 是自动化构建工具。

传统项目开发存在的问题

一个项目做成一个工程,造成工程比较庞大,需要使用多模块来划分项目;

项目中需要的数量众多的jar 包,需要手动下载并引入,并且多个项目需要的jar 包存在重复的问题;

项目中需要的jar 包有版本兼容的问题,需要手动解决; 项目中需要的jar 包又依赖其它的jar 包,需要手动解决。

Maven 概述

Maven 是Apache 软件基金会组织维护的一款自动化构建工具,专注服务于Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。读音是['meɪv(ə)n]或['mevn]。

Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具。

Maven 可以整合多个项目之间的引用关系,我们可以根据业务和分层需要任意拆分一个项目;

Maven 提供规范的管理各个常用jar 包及其各个版本,并且可以自动下载和引入项目中;

Maven 可以根据指定版本自动解决jar 包版本兼容问题; Maven 可以把jar包所依赖的其它jar 包自动下载并引入项目。

类似自动化构建工具还有:Ant, Maven, Gradle。

构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。

构建过程的几个主要环节

①清理:删除以前的编译结果,为重新编译做好准备。

②编译:将Java源程序编译为字节码文件。

③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。

④报告:在每一次测试后以标准的格式记录和展示测试结果。

⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar 包,Web工程对应war包。

⑥安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。

⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行

Maven 核心概念

Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从Maven的九个核心概念入手,看看Maven是如何实现自动化构建的?

①POM

②约定的目录结构

③坐标

④依赖管理

⑤仓库管理

⑥生命周期

⑦插件和目标

⑧继承

⑨聚合

Maven特点

那么,Maven 和 Ant 有什么不同呢?

在回答这个问题以前,首先要强调一点:Maven 和 Ant 针对构建问题的两个不同方面。Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务。因此,由于 Maven 和 Ant代表两个差异很大的工具。所以接下来只说明这两个工具的等同组件之间的区别,如表 1 所示。

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。

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

安装 Maven 环境

1、确保安装了java 环境:maven 本身就是java 写的,所以要求必须安装JDK。

查看java 环境变量:echo %JAVA_HOME%

2、下载并解压maven 安装程序:

maven.apache.org/download.cg…

3、配置 Maven 的环境变量:

MAVEN_HOME=d:/apache-maven-3.3.9 或 者M2_HOME=d:/apache-maven-3.3.9 path=%MAVEN_HOME%/bin; 或者%M2_HOME%/bin;

4、验证是否安装成功: mvn –v

Maven 的核心概念

Maven 工程约定目录结构

maven 中约定的目录结构:

Hello

|---src

|---|---main

|---|---|---java

|---|---|---resources

|---|---test

|---|---|---java

|---|---|---resources

|---pom.xml

说明:

  • Hello:根目录,也就是工程名
  • src:源代码
  • main:主程序
  • java:主程序的java 源码
  • resources:主程序的配置文件
  • test:测试程序
  • java:测试程序的java 源码
  • resources:测试程序的配置文件
  • pom.xml:Maven工程的核心配置文件。

一般情况下,我们习惯上采取的措施是:约定>配置>编码

maven 的pom.xml 记录的关于构建项目的各个方面的设置,maven 从pom.xml 文件开始,按照助约定的工程目录编译,测试,打包,部署,发布项目。

第一个maven 工程

按照如下步骤,实现第一个maven 项目,以 maven 推荐的约定方式创建目录,类文件。

  1. 某个目录中创建文件夹Hello

  2. 在Hello 中创建子目录 src

  3. 拷贝pom.xml 到Hello 目录和src 是同级放置的。

  4. 进入src 目录,创建main, test 目录

  5. 进入main 目录,创建 java,resources 目录。

  6. 进入java 目录,创建目录 com/bjpowernode/

在 com/bjpowernode/目录下创建 HelloMaven.java 文件,定义 int addNumber(int n1,n2){ return n1+n2};

定义public static void main(String args[]) { System.out.prinltn(“Hello Manven”); //也可以调用 addNumber()方法 }

  1. 进入到Hello 目录在,执行 mvn compile

  2. 进入到target/classes 目录执行 java

com.bjpowernode.HelloMaven

pom 文件

即Project Object Model 项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,在xml 文件中进行声明,以方便进行构建和描述, pom.xml 是 Maven 的灵魂。所以,maven 环境搭建好之后,所有的学习和操作都是关于pom.xml 的。

pom.xml 初识:

学Maven,看这一篇就够了!(视频|资料,建议收藏!)相关推荐

  1. 23上教资开始注册!详细报名流程看这一篇就够了!(建议收藏)

    注意!2023年1月12日部分省份如:河北.上海.浙江.湖北.湖南.海南.云南.四川.重庆已经可以注册教资笔试了!注册网址:中国教育考试网,选择对应省份进入即可查看是否可以注册! 提示:注册未开启的将 ...

  2. 学Python看这一篇就够了!!!

    新手小白学Python在还没有人带的情况下很容易半途而废,Python的学习.开发经验会遇到一些问题,大家首先得正视这些问题,然后想办法解决. ① 没有全面的学习步骤: ② 资料不完整,缺乏实战: ③ ...

  3. 学python看这一篇就够了

    文章目录 一.python基础 常见数据类型: 1.字符串类型 2.数字类型 3.List列表类型 用[]定义 可变 4. tuple 元组 用()定义 不可变 5.Dict字典 用{}定义 6.se ...

  4. python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...

    https://mp.weixin.qq.com/s/B6pEZLrayqzJfMtLqiAfpQ 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是 ...

  5. docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  6. mysql ip比较大小_MySQL优化/面试,看这一篇就够了

    原文链接:http://www.zhenganwen.top/articles/2018/12/25/1565048860202.html 作者:Anwen~ 链接:https://www.nowco ...

  7. 深度好文:云网络丢包故障定位,看这一篇就够了~

    深度好文:云网络丢包故障定位,看这一篇就够了~ https://mp.weixin.qq.com/s/-Q1AkxUr9xzGKwUMV-FQhQ Alex 高效运维 今天 来源:本文经授权转自公众号 ...

  8. 代理后台中间件_Golang Gin 实战(十三)| 中间件详解看这一篇就够了

    6000字大章带你死磕Golang Gin中间件 在Gin的整个实现中,中间件可谓是Gin的精髓.一个个中间件组成一条中间件链,对HTTP Request请求进行拦截处理,实现了代码的解耦和分离,并且 ...

  9. 计算机二级excel高级筛选,Excel高级筛选,看这一篇就够了!

    原标题:Excel高级筛选,看这一篇就够了! Excel高级筛选,看这一篇就够了 Excel中的自动筛选很多人都会用,但经常遇到多条件或复杂条件筛选时卡壳的窘境,其实强大的Excel早就为你准备了N多 ...

  10. Fortran保姆级教学——考试所有知识点看这一篇就够了

    Fortran保姆级教学--考试所有知识点看这一篇就够了 临近期末本人复习的同时将整个fortran课堂知识整理了下来,希望学弟学妹们今后学这门课的时候不至于在csdn找不到系统的教程,也希望能帮到需 ...

最新文章

  1. mabatisplus怎么给实体类自定义属性_吊打面试官之:当实体类中的属性名和表中的字段名不一样 ,怎么办 ?...
  2. PHP测试使用postman发送post请求,却报错此接口不支持get请求的原因
  3. python与正则表达式(part5)--re模块使用
  4. 【计算机网络】TCP四次挥手
  5. 【Flink】Rowtime timestamp is null. Please make sure that a proper TimestampAssigner is defined and th
  6. MVC中的cshtml与ASPX的区别
  7. 多个值合并成一个字段oracle排序,Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)...
  8. Camera电路、图像传感器问题汇总
  9. 论文解读|BMVC 2019 |Fast-SCNN Fast Semantic Segmentation Network
  10. 软件测试kpi绩效考核表,测试工程师绩效考核表.xls
  11. 报错:array_column函数未定义(原因:php版本问题)
  12. 【网页设计】31:文本声明
  13. ThingJS:如何一键生成3D城市地图
  14. 2021“设计+”珠宝首饰创新设计论坛
  15. 计算机科学领域外文期刊影响因子排行,2020最新SCI影响因子出炉,中国期刊Top100榜单公布,附最全EXCEL完整版目录!...
  16. Ubuntu 之 Audacity踩坑之旅
  17. Talk预告 | 微软亚洲研究院王希廷:基于逻辑规则推理的深度自可解释模型
  18. java neo4j rest api_Neo4j REST API使用实例—ttlsa教程系列之neo4j(二)
  19. 读书笔记《进化的力量:刘润年度演讲1》
  20. mybatis java类注解式_mybatis注解详解

热门文章

  1. php 499状态如何处理,HTTP499状态码 nginx下499错误及其解决方法
  2. 输入关键字生成对联_百度“智能春联”玩出新年味 输入关键词秒出春联
  3. 怎么获取股票历史数据?获取股票历史数据Excel
  4. 华为计算机主板,华为鲲鹏920台式机主板亮相:性能配置都亮眼
  5. 从新一期技术雷达看技术领域最新趋势
  6. K.dot和K.batch_dot
  7. 关于unity3d多点触控的研究
  8. 作业管理系统设计报告_Struts2_设计报告
  9. 凯德中国 × 阿里云 × 奇点云 | 沉淀数据资产,遇见数智未来
  10. 浅谈localhost