你竟然没用 Maven 构建项目?(上)

简介: 一年前,当我和小伙伴小龙一起做一个外包项目的时候,受到了严重的鄙视。我那时候还不知道 Maven,所以搭建项目用的还是最原始的方式,小龙不得已在导入项目的时候花了很长时间去下载项目依赖的开源类库。出于对我的尊重,小龙没有破口大骂,而是非常委婉地说了一句:“二哥,你好歹也有一定的知名度了,竟然没用 Maven 构建项目,真让我大开眼界啊。”作为一名富有上进心的程序员,不能忍啊。借此机会,有必要隆重地向大家介绍一下 Maven 了。

01、Maven 是什么?

不管英文功底好不好,先看看官网给出的介绍语吧:

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

大致的意思就是说,Apache Maven 是一个项目管理和自动化构建工具,基于项目对象模型(POM)的概念,可以管理项目的构建、报告以及文档。作为 Apache 组织中的一个颇为成功的开源项目,Maven 主要服务于基于 Java 的项目构建、依赖管理和项目信息管理

Maven 采用了约定优先配置的原则,这些原则如下表所示:

目录 目的
${basedir} 存放 pom.xml 和所有的子目录
${basedir}/src/main/java 存放 Java 源代码
${basedir}/src/main/resources 存放项目的资源文件,比如说 log4j.properties
${basedir}/src/test/java 存放测试类
${basedir}/src/test/resources 存放测试用的资源
${basedir}/src/main/webapp 存放 Web 前端文件
${basedir}/target 项目打包后的输出目录
${basedir}/target/classes 项目编译后输出目录
~/.m2/repository 默认的 Maven 仓库目录(~表示用户目录)

使用约定优先配置带来的最大好处就是项目的目录结构图非常的统一,不同的开发者在开发一个 Maven 项目的时候,文件存放位置几乎没有差别,省去了很多不必要的麻烦,有利于促进项目团队的标准化。

我们这个年代非常崇尚开源精神,几乎所有的 Java 项目都会借用一些第三方的开源类库,这些类库可以通过依赖的方式引入到项目中来。但随着依赖的增多,版本冲突、依赖臃肿的问题就会接踵而来。手工解决这些问题是十分枯燥的,幸运的是 Maven 提供了一个优秀的解决方案,它通过一个三维的坐标(<groupId><artifactId><version>)来准确地定位每一个开源类库。

另外,我认为 Maven 特别优秀的一点是,它把项目依赖的所有开源类库都从远程中央仓库下载到了指定的本地仓库中,也就是说,这些开源类库可以在多个项目之间共用,无需重复下载——假如我用 Maven 构建项目的话,小龙就不用下载那么多开源类库了,他的本地仓库中可能已经有了——我也就不会被鄙视了。

02、配置 Maven 环境

1)安装 Maven 之前,先确保电脑上已经安装了 JDK。

2)去 Maven 官网下载想要的版本并解压,下载地址为:

https://maven.apache.org/download.cgi

3)设置环境变量,主要是 MAVEN_HOME 和 Path。

21.jpg

4)打开命令行,输入 mvn -v 验证 Maven 是否配置成功。

22.jpg

5)Maven 的 conf 目录下包含了一个非常重要的文件 settings.xml,一般情况下,我倾向于将该文件复制到 ~/.m2/ 目录下——建议你也这么做。

打开该文件,在 <mirrors></mirrors> 节点下添加阿里云的镜像地址(参照下面的代码)。为什么要这么做呢?因为 Maven 默认的仓库在不翻强的情况下很难访问到。

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
</mirror>

这里需要注意的是,<mirrorOf> 的值有下面四种方式:

  • *:匹配所有远程仓库,也就是说任何对于中央仓库的请求都会转至该镜像。
  • external:*:匹配所有不在本机上的远程仓库。
  • repo1,repo2:匹配仓库 repo1 和 repo2,使用逗号分隔多个远程仓库。
  • *,!repo:匹配所有远程仓库,repo 除外,使用感叹号将仓库从匹配中排除。

6)在 Eclipse 下依次选择菜单 Window → Show View → Other → Maven → Maven Workspace Build,查看镜像是否配置成功(我习惯了使用 Eclipse,所以请见谅,不过不管使用哪种集成开发环境,思路和步骤都大差不差)。

23.jpg

、快速创建 Maven 项目

为了尽快步入重点,这一小节我会有意的避重就轻,没必要的步骤会略过。

1)在 Eclipse 中新建项目的时候选择 Maven Project。

2)在接下来选择项目类型的时候,选择 maven-archetype-quickstart,如下图所示。

24.jpg

3)然后指定项目参数的时候填写 group id 和 artifact id。

4)项目创建成功后的目录结构图如下图所示。

25.jpg

Maven 3 默认使用的依然是 JDK 1.5,不过我们可以为其配置更高版本的 JDK,后面会聊到。

04、详细分析 pom.xml

毫无疑问,Maven 项目的灵魂只有一个,那就是 pom.xml 文件,所以接下来我会详细地对其进行分析。

1)项目基本信息

pom.xml 文件的第一部分主要用来描述项目的基本信息。

<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>
  <groupId>com.cmower</groupId>
  <artifactId>test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>test</name>
</project>

①、<project> 是 pom.xml 的根元素,声明了相关的命名空间。

②、<modelVersion> 指定了当前项目对象模型(POM)的版本,对于 Maven 3.x 来说,该值只能是 4.0.0。

③、<groupId> 定义了项目的组名,这个组往往和项目所在的组织或公司关联。

④、<artifactId> 定义了当前 Maven 项目在组中唯一的 ID。

⑤、<version> 定义了项目的版本号,SNAPSHOT 为快照的意思,也就是说该项目还处于开发阶段。

⑥、<packaging> 定义了项目的打包类型,可选值有 war、jar 等。

⑦、<name> 定义了项目的名称。


相关文章
|
1天前
|
Java jenkins 持续交付
Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试
【7月更文挑战第1天】Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试。成功后,Jenkins执行部署任务,发布到服务器或云环境。使用Jenkins能提升效率,保证软件质量,加速上线,并需维护其稳定运行。
11 0
|
2天前
|
Java 测试技术 Maven
Maven 构建生命周期
Maven的构建生命周期包括Clean、Default和Site三个阶段,用于项目构建、清理和文档生成。Default生命周期中的validate、compile、test、package、verify、install和deploy步骤依次执行,完成从验证到部署的全过程。插件目标如`dependency:copy-dependencies`可独立于构建阶段调用,如`mvn clean dependency:copy-dependencies package`先清理、复制依赖,再打包。
|
2天前
|
Java Maven
Maven 自动化构建
**Maven自动化构建确保依赖稳定性。当bus-core-api(1.0-SNAPSHOT)构建完成后,app-web-ui和app-desktop-ui这两个依赖它的项目自动触发构建,维持版本协调。**
|
3天前
|
Java Shell Apache
Maven 项目文档
使用 Maven 创建 `consumerBanking` 项目,命令行输入: ```sh mvn archetype:generate -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ``` 确保 `pom.xml` 包含最新 `maven-site-plugin`(v3.3+)和 `maven-project-info-reports-plugin`(v2.7+)
|
4天前
|
数据可视化 Java Apache
Maven Dependency Tree:深入理解你的项目依赖
Maven Dependency Tree:深入理解你的项目依赖
20 0
|
5天前
|
Java 测试技术 Maven
Maven 构建生命周期
Maven生命周期包括Clean(clean)、Default(validate, compile, test, package, verify, install, deploy)和Site(site, deploy-site)。Clean清除编译输出,Default处理验证、编译、测试、打包、检查、安装和部署,Site生成项目文档。阶段按序执行,插件目标如dependency:copy-dependencies可独立调用。例如,`mvn clean dependency:copy-dependencies package`先执行清理,然后复制依赖,最后打包。
|
5天前
|
Java Maven
Maven 自动化构建
**Maven自动化构建确保依赖稳定性**:当`bus-core-api`构建完成后,`app-web-ui`和`app-desktop-ui`这两个依赖它的项目自动构建。`app-web-ui`引用`bus-core-api`的1.0-SNAPSHOT,同样`app-desktop-ui`也依赖相同的版本。
|
5天前
|
XML Java Maven
Maven 构建配置文件
Maven构建配置文件用于定制构建,默认值可通过pom.xml中的profiles或activeProfiles调整,适应不同环境如生产和开发。配置文件分项目级、用户级和全局级。激活方式包括命令行、Maven设置、环境变量、操作系统设置及文件存在。示例中,env.properties为基础配置,env.test.properties和env.prod.properties对应测试和生产环境。AntRun插件常用于生命周期绑定,但与配置文件功能本身无关。
|
5天前
|
Java 测试技术 Maven
Maven打包使用多线程加速构建过程
Maven打包使用多线程加速构建过程
30 0
|
5天前
|
Java Maven
Maven如何创建Maven web项目
Maven如何创建Maven web项目