@TOC
作为 Apache 组织中的一个颇为成功的开源项目, ==Maven 主要服务于基于 java 平台的项目构建, 依赖管理和项目信息管理。== 无论是小型的开源类库项目, 还是大型的企业级应用; 无论是传统的瀑布式开发, 还是流行的敏捷开发, Maven 都能大显身手。
总结一下, 我们会发现, 除了编写源代码, 我们每天有相当一部分时间花在了编译,运行单元测试, 生成文档, 打包和部署等繁琐且不起眼的工作上, 这就是构建。
==Ant 构建==
最早的构建工具, 基于 IDE, 大概是 2000 年有的, 当时是最流行 java 构建工具,不过它的 XML 脚本编写格式让 XML 文件特别大。 对工程构建过程中的过程控制特别好。
==Maven【 JAVA】==
==项目对象模型, 通过其描述信息来管理项目的构建, 报告和文档的软件项目管理工具==。 它填补了 Ant 缺点, Maven 第一次支持了从网络上下载的功能, 仍然采用 xml 作为配置文件格式。 Maven 专注的是依赖管理, 使用 Java 编写。
==Gradle==
属于结合以上两个的优点, 它继承了 Ant 的灵活和 Maven 的生命周期管理, 它最后被 google 作为了 Android 御用管理工具。 它最大的区别是不用 XML 作为配置文件格式, 采用了 DSL 格式, 使得脚本更加简洁。
==目前市面上 Ant 比较老, 所以一般是一些比较传统的软件企业公司使用, Maven使用 Java 编写, 是当下大多数互联网公司会使用的一个构建工具, 中文文档也比较齐全,gradle 是用 groovy 编写, 目前比较新型的构建工具一些初创互联网公司会使用, 以后会有很大的使用空间.==
==依赖管理系统、 多模块构建、 一致的项目结构 、 一致的构建模型和插件机制。==
Maven 为 Java 世界引入了一个新的依赖管理系统 jar 包管理 jar 升级时修改配置文件即可。 在 Java 世界中, ==可以用 groupId、 artifactId、 version 组成的Coordination( 坐标) 唯一标识一个依赖。== 任何基于 Maven 构建的项目自身也必须定义这三项属性, 生成的包可以是 Jar 包, 也可以是 war 包或者 jar 包。 一个典型的依赖引用
如下所示:
<dependency>
<groupId>javax.servlet</groupId> //包名/项目名
<artifactId>javax.servlet-api</artifactId> //某一模块名
<version>3.1.0</version> //所需要jar的版本
</dependency>
==注意:==
1)==坐标属性的理解:== Maven 坐标为各种组件引入了秩序, 任何一个组件都必须明确定义自己的坐标。
2)==groupId:== 定义当前 Maven 项目隶属的实际项目-公司名称
3)==artifactId(工程名):== 该元素定义实际项目中的一个 Maven 模块-项目名
4)==version:== 该元素定义 Maven 项目当前所处的版本。
项目复查时 dao service controller 层分离将一个项目分解为多个模块已经是很通用的一种方式。在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM。在该 POM 中可以使用 <modules> 标签来定义一组子模块。 parent POM 不会有什么实际构建产出。 而 parent POM 中的 build 配置以及依赖配置都会自动继承给子 module。
Ant 时代大家创建 Java 项目目录时比较随意, 然后通过 Ant 配置指定哪些属于source,那些属于 testSource 等。而 Maven 在设计之初的理念就是 Conversion overconfiguration( 约定大于配置)。 其制定了一套项目目录结构作为标准的 Java 项目结构,解决不同 ide 带来的文件目录不一致问题。
<plugin>
<!--这里是所有添加插件配置的地方-->
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.25</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<contextPath>/test</contextPath>
</configuration>
</plugin>
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。