Java 项目需要通过 构建工具 来管理项目依赖,完成编译、打包、发布、生成 JavaDoc 等任务。
- 目前最主流的构建工具是 Maven,它的功能非常强大。
- Gradle 号称是要替代 Maven 等构件工具,它的版本管理确实简洁,但是需要学习 Groovy,学习成本比 Maven 高。
- Ant 功能比 Maven 和 Gradle 要弱,现代 Java 项目基本不用了,但也有一些传统的 Java 项目还在使用。
- Java219
- 数据库114
- 分布式82
- 设计81
- 框架75
- JavaCore65
- Spring64
- 工具53
- 笔记52
- 大数据32
- 分布式通信29
- 设计模式28
- Spring核心24
- 架构23
- 搜索引擎数据库22
- DevOps21
- 关系型数据库21
- 软件20
- KV数据库20
- 网络19
- Redis18
- 算法17
- MQ17
- 分布式协同16
- Elasticsearch16
- 操作系统15
- 列式数据库15
- 分布式理论15
- MySQL15
- 综合14
- 面试13
- 基础特性13
- HBase13
- 编程12
- 文档数据库12
- 中间件11
- Linux11
- IO11
- 并发11
- 其他11
- MongoDB11
- Spring数据10
- Kafka10
- Flink9
- Hive9
- JVM9
- 安全9
- 构建9
- 工作8
- 服务器8
- 编程语言8
- 解决方案8
- 分布式存储8
- SpringWeb8
- 重构7
- 分布式调度7
- 容器7
- 高级特性7
- ZooKeeper7
- Maven7
- 人工智能6
- JavaWeb6
- 网络分层6
- 网络协议6
- 分布式治理6
- 监控诊断6
- Python6
- Nginx6
- Hadoop5
- 缓存5
- 测试5
- Tomcat5
- 微服务5
- Docker5
- Elastic5
- RPC5
- UML4
- 网络技术4
- 数据库综合4
- 术4
- JavaBean4
- 模板引擎4
- ORM4
- IDE4
- SpringIO4
- Spring其他4
- Spring综合4
- Spring集成4
- 软件工程3
- 编程范式3
- 数据库中间件3
- 流量控制3
- Git3
- Kubernetes3
- RocketMQ3
- Spring安全2
- 健康1
- 器1
- 法1
Maven 是一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西。
- 版本 - maven 有自己的版本定义和规则。
- 构建 - maven 支持许多种的应用程序类型,对于每一种支持的应用程序类型都定义好了一组构建规则和工具集。
- 输出物管理 - maven 可以管理项目构建的产物,并将其加入到用户库中。这个功能可以用于项目组和其他部门之间的交付行为。
- 依赖关系 - maven 对依赖关系的特性进行细致的分析和划分,避免开发过程中的依赖混乱和相互污染行为
- 文档和构建结果 - maven 的 site 命令支持各种文档信息的发布,包括构建过程的各种输出,javadoc,产品文档等。
- 项目关系 - 一个大型的项目通常有几个小项目或者模块组成,用 maven 可以很方便地管理。
- 移植性管理 - maven 可以针对不同的开发场景,输出不同种类的输出结果。
Maven 简介
Maven 是什么
Maven 是一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西。
- 版本 - maven 有自己的版本定义和规则。
- 构建 - maven 支持许多种的应用程序类型,对于每一种支持的应用程序类型都定义好了一组构建规则和工具集。
- 输出物管理 - maven 可以管理项目构建的产物,并将其加入到用户库中。这个功能可以用于项目组和其他部门之间的交付行为。
- 依赖关系 - maven 对依赖关系的特性进行细致的分析和划分,避免开发过程中的依赖混乱和相互污染行为
- 文档和构建结果 - maven 的 site 命令支持各种文档信息的发布,包括构建过程的各种输出,javadoc,产品文档等。
- 项目关系 - 一个大型的项目通常有几个小项目或者模块组成,用 maven 可以很方便地管理。
- 移植性管理 - maven 可以针对不同的开发场景,输出不同种类的输出结果。
简介
Maven 插件是 Maven 构建系统的核心执行单元。
Maven 本身只是一个构建生命周期的调度框架,它定义了 clean、default、site 三套标准生命周期以及其中的各个阶段(phase),但每个阶段具体做什么,则由**插件(Plugin)**来决定。Maven 的设计哲学是"插件化"——几乎所有实际工作(编译、测试、打包、部署、代码检查、文档生成等)都由插件完成。
简而言之:Maven 定义了"何时做"(生命周期阶段),插件决定了"做什么"和"怎么做"(goal 的具体实现)。
pom.xml 简介
什么是 pom
POM 是 Project Object Model 的缩写,即项目对象模型。
pom.xml 就是 maven 的配置文件,用以描述项目的各种信息。
pom 配置一览
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- More Project Information -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Environment Settings -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
settings.xml 简介
settings.xml 有什么用
从 settings.xml 的文件名就可以看出,它是用来设置 maven 参数的配置文件。settings.xml 中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置。
- settings.xml 是 maven 的全局配置文件。
- pom.xml 文件是本地项目配置文件。
settings.xml 文件位置
settings.xml 文件一般存在于两个位置:
发布 jar 包到中央仓库
为了避免重复造轮子,相信每个 Java 程序员都想打造自己的脚手架或工具包(自己定制的往往才是最适合自己的)。那么如何将自己的脚手架发布到中央仓库呢?下面我们将一步步来实现。
在 Sonatype 创建 Issue
(1)注册 Sonatype 账号
发布 Java 包到 Maven 中央仓库,首先需要在 Sonatype 网站创建一个工单(Issues)。
Maven 常见问题
dependencies 和 dependencyManagement,plugins 和 pluginManagement 有什么区别
dependencyManagement 是表示依赖 jar 包的声明,即你在项目中的 dependencyManagement 下声明了依赖,maven 不会加载该依赖,dependencyManagement 声明可以被继承。
dependencyManagement 的一个使用案例是当有父子项目的时候,父项目中可以利用 dependencyManagement 声明子项目中需要用到的依赖 jar 包,之后,当某个或者某几个子项目需要加载该插件的时候,就可以在子项目中 dependencies 节点只配置 groupId 和 artifactId 就可以完成插件的引用。
简介
Apache Ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于 Java 环境中的软件开发。由 Apache 软件基金会所提供。
Ant 是纯 Java 语言编写的,所以具有很好的跨平台性。
