Maven系列二Maven简介

Maven简介

什么是maven

我们会发现,除了编写源代码之外,还有相当的时间花费在编译、运行单元测试、生成文档、打包和部署等繁琐的工作上,这就是构建。

而maven的用途之一是服务于构建,它是一个异常强大的构建工具,能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。

maven作为一个构建工具,不仅能帮助我们自动化构建,还能够抽象构建过程,提供构建任务实现;它跨平台,对外提供了一致的操作接口,这一切足以使它成为优秀的、流行的构建工具。

maven还能帮助我们管理原本分散在项目中各个角落的项目信息,包括项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等。

maven提供了一个免费的中央仓库。

maven对于项目目录结构、测试用例命名方式等内容都有既定的规则,只要遵循了这些成熟的规则,用户在项目间切换的时候就免去了额外的学习成本,可以说是约定大于配置(convention over configuration)。

构架工具发展

Make

Make也许是最早的构架工具,它由Stuart于1977年在bell实验室创建。目前Make有很多衍生实现,包括最流行的GNU Make和BSD Make,还有Windows的Microsoft nmake等。

Make由一个名为Makefile的脚本文件驱动,该文件使用Make自己定义的语法格式。其基本组成部分为一系列规则(Rules),而每一条规则又包括目标(target)、依赖(prerequisite)和命令(command)。Makefile的基本结构如下:

TARGET...: PREREQUISITE...
COMMAND
...
...

Make通过一系列目标和依赖将整个构建过程串联起来,同时利用本地命令完成每个项目的实际行为。Make的强大之处在于他可以利用所有系统的本地命令,帮助make快速高效地完成任务。

Make将自己和操作系统绑定在一起了。也就是说,使用Make就不能实现跨平台的构建,这对于java来说是很不友好的。

另外,Makefile的语法也是很大的问题,他可能因为一个tab或者空格而编译失败

Ant

ant指的是”另一个整洁的工具“(another neat tool),它最早是用来构建tomcat的。我们可以将ant看成是一个java版本的make,他是跨平台的。此外,ant使用xml定义构建脚本,相对于makefile来说,这也更加友好。

与make类似,ant有一个构建脚本build.xml。如下所示:

<?xml version="1.0"?>
<project name="hello" default="compile">
	<target name="compile" description="compile the Java source code to class files">
    	<mkdir dir="classes"/>
        <javac srcdir="." destdir="classes"/>
    </target>
    <target name="jar" depends="compile" description="create a Jar file">
    	<jar destfile="hello.jar">
        	<fileset dir="classes" includes="* */*.class"/>
            <manifest>
            	<attribute name="Main-Class" value="HelloProgram"/>
            </manifest>
        </jar>
    </target>
</project>

build.xml的基本结构也是目标(target)、依赖(depends),以及实现目标的任务。上面的脚本中,jar目标用来创建应用程序jar文件,该目标依赖于compile目标,后者执行的任务是创建一个名为classes 的文件夹,编译当前目录的java文件至classes目录。compile目标完成后,jar目标再执行自己的任务。

ant中有大量内置的用java实现的任务,这保证了其跨平台的特质,同时,ant也有特殊的任务exec来执行本地命令。

ant也有一定的缺点:

  1. 和make一样,ant也是过程式的,开发者显式地指定每一个目标,以及完成该目标所需要执行的任务。【这个过程隐含了很大的重复】
  2. ant是没有依赖管理的,所以很长一段时间ant用户都不得不手工管理依赖,现在可以借助lvy管理依赖。

maven

maven是声明式的,项目构建过程和过程各个阶段所需要的工作都由插件实现,并且大部分插件都是现成的,开发者只需要声明的基本元素,maven就执行内置的、完整的构建过程。这在很大程度上消除了重复。

构建工具发展史

  • make
  • ant
  • maven
  • gradle

前端构建工具:

  • 2009年,npm
  • 2012年,grunt
  • 2012年,bower
  • 2013年,yeoman
  • 2014年,gulp
  • 2015年,fis3
  • 2017年,webpack3
  • 2018年,@vue-cli

python构建工具:

setup.py

go构建工具:

go build

原文地址:https://www.cnblogs.com/SsoZhNO-1/p/15516431.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇文章和大家了解一下怎么搭建maven私有仓库。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。在本篇文章中,我们将介绍如何搭建一个Maven...
今天小编给大家分享的是如何解决Maven依赖冲突,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。目...
这篇文章主要介绍了Maven仓库分类的优先级是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Maven仓库分类的优先级是什么文...
本篇内容主要讲解“Maven怎么实现自己的starter依赖”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Maven怎
本篇内容主要讲解“maven不能下载oraclejdbc驱动的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大...
这篇文章主要介绍了怎么使用maven基本命令打包包名的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用maven基本命令打包包...
本篇内容介绍了“maven中profile如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
本文小编为大家详细介绍“Maven打包没有指定主类问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Maven打包没有指定主类问题怎么解决”文章能帮助...
这篇文章主要介绍“maven怎么打包动态环境变量”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“maven怎么打包动态环...
今天小编给大家分享一下Maven离线模式打包的步骤是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考
本文小编为大家详细介绍“maven打包时候修改包名称带上git版本号和打包时间的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“maven打包时候修改包...
这篇文章主要讲解了“maven打包怎么指定jdk的版本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“maven打...
这篇“Maven打包时怎么指定启动类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读
这篇文章主要讲解了“怎么使用jenkins配置maven和JDK”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎
这篇文章主要介绍了maven中配置项目的jdk版本无效怎么排查的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇maven中配置项目的jdk...
今天小编给大家分享一下Maven提示jdk版本不正确怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考
本篇内容主要讲解“maven优缺点及使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“maven优缺点
这篇文章主要介绍“maven项目引入maven库没有jar怎么处理”,在日常操作中,相信很多人在maven项目引入maven库没有jar怎么处理问题上存在疑惑,小编查阅了各式资...
本篇内容主要讲解“怎么下载远程maven仓库的jar并手动放到本地仓库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学...
这篇文章主要介绍“maven私服搭建与使用的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“maven私服搭建...