【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(一)

简介: 【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)

Maven介绍

由于Java的生态非常丰富,无论你想实现什么功能,都能找到对应的工具类,这些工具类都是以jar包的形式出现的,例如Spring,SpringMVC、MyBatis、数据库驱动,等等,都是以jar包的形式出现的,jar包之间会有关联,在使用一个依赖之前,还需要确定这个依赖所依赖的其他依赖,所以,当项目比较大的时候,依赖管理会变得非常麻烦臃肿,这是Maven解决的第一个问题。

为什么使用Maven

Maven还可以处理多模块项目。简单的项目,单模块分包处理即可,如果项目比较复杂,要做成多模块项目,例如一个电商项目有订单模块、会员模块、商品模块、支付模块,一般来说,多模块项目,每一个模块无法独立运行,要多个模块合在一起,项目才可以运行,这个时候,借助Mavn工具,可以实现项目的一键打包。

Maven之前,我们更多的是使用Ant的项目构建工具,Ant有一个特点,每次都得写,每次都写的差不多,配置也臃肿。所以,后来搞出来Maven。Maven就是最先进的版本构建工具吗?不是的,只不过,目前在Java领域Maven使用比较多。除了Maven,还有Gradle。

Maven是什么

Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),反映在配置中,就是一个pom.xml文件。是一组标准集合,一个项目的生命周期、一个依赖管理系统,另外还包括定义在项目生命周期阶段的插件(plugin) 以及目标(goal) 。当我们使用Maven aven的使用通过一个自定义的项目对象模型,pom.xml来详细描述我们自己的项目。

两大核心功能

Maven安装

Maven是Java项目,因此必须先安装JDK。


下载Maven

下载地址:maven.apache.org/download.cg…



解压并且配置

打开并且解压maven的压缩包。 如下图所示。 我的版本是3.9.2。


配置,只需要配置环境变量即可:

首先配置 MAVEN HOME, 因为我的是Mac系统,所以我的一个操作仅限于Mac的用户。在Mac上配置Maven的环境变量,需要按照以下步骤进行操作:

打开终端

输入以下命令来编辑~/.bash_profile文件:

bash

复制代码

nano ~/.bash_profile

在打开的文件中添加以下内容:

bash

复制代码

export M2_HOME=/usr/local/apache-maven-3.9.2
export PATH=$PATH:$M2_HOME/bin

这里假设您安装的Maven版本是3.9.2。如果您使用的是其他版本,请相应地更改路径。按下Control + X键然后输入Y保存修改,最后按下回车键退出文件。

输入以下命令以重新加载.bash_profile文件

bash

复制代码

source ~/.bash_profile

检查Maven是否已正确安装和配置:

复制代码

mvn -version

如果成功安装和配置,将显示Maven版本信息。



如果使用了Intelli IDEA,可以不用去额外下载Maven,直接使用IDEA中自带的Maven插件即可。IntelliJ IDEA中自带的Maven插件在\xxxx\plugins\maven\lib\maven3。

Maven配置

实际上,没有特殊需求的话,安装好之后直接就可以用了。一般来说,还是需要稍微配置一下,比如中央仓库的问题。默认使用Maven自己的中央仓库,使用起来网速比较慢,这个时候,可以通过修改配置文件,将仓库改成国内的镜像仓库,国内仓库使用较多的是阿里巴巴的仓库。

阿里巴巴云效仓库

阿里云Maven中央仓库为 阿里云云效 提供的公共代理仓库,帮助研发人员提高研发生产效率,使用阿里云Maven中央仓库作为下载源,速度更快更稳定。



仓库类型

仓库类型 介绍说明
本地仓库 就是你自己电脑上的仓库,每个人电脑上都有一个仓库,默认位置在当前用户名.m2\repository
私服仓库 一般来说是公司内部搭建的Maven私服,处于局域网中,访问速度较快,这个仓库中存放的jar一般就是公司内部自己开发的jar
中央仓库 有Apache团队来维护,包含了大部分的jar,早期不包含Oracle数据库驱动,从2019年8月开始,包含了0 racle驱动

现在存在3个仓库,那么jar包如何查找呢?


本地仓库配置

本地仓库默认位置在当前用户名.m2\repository,这个位置可以自定义,但是不建议大家自定义这个地址,有几个原因:

  1. 虽然所有的本地的jar都放在这个仓库中,但是并不会占用很大的空间。
  2. 默认的位置比较隐蔽,不容易碰到

技术上来说,当然是可以自定义本地仓库位置的,在conf/settings.xml中自定义本地仓库位置:



远程镜像配置

由于默认的中央仓库下载较慢,因此,也可以将远程仓库地址改为阿里巴巴或者其他资源的镜像的仓库地址:

xml

复制代码

<mirror>
      <!--This sends everything else to /public -->
      <id>central-mirror</id>
      <mirrorOf>central</mirrorOf> 
      <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
    <mirror>
      <!--This sends everything else to /public -->
      <id>jcenter-mirror</id>
      <mirrorOf>jcenter</mirrorOf> 
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <!--This sends everything else to /public -->
      <id>public-mirror</id>
      <mirrorOf>public</mirrorOf> 
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <!--This sends everything else to /public -->
      <id>google-mirror</id>
      <mirrorOf>public</mirrorOf> 
      <url>https://maven.aliyun.com/repository/google</url>
    </mirror>
    <mirror>
      <!--This sends everything else to /public -->
      <id>public-mirror</id>
      <mirrorOf>public</mirrorOf> 
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <!--This sends everything else to /public -->
      <id>gradle-plugin-mirror</id>
      <mirrorOf>gradle-plugin</mirrorOf> 
      <url>https://maven.aliyun.com/repository/gradle-plugin</url>
    </mirror>            
    <mirror>
      <!--This sends everything else to /public -->
      <id>spring-mirror</id>
      <mirrorOf>spring</mirrorOf> 
      <url>https://maven.aliyun.com/repository/spring</url>
    </mirror>                
    <mirror>
      <!--This sends everything else to /public -->
      <id>spring-plugin-mirror</id>
      <mirrorOf>spring-plugin</mirrorOf> 
      <url>https://maven.aliyun.com/repository/spring-plugin</url>
    </mirror>                
    <mirror>
      <!--This sends everything else to /public -->
      <id>grails-core-mirror</id>
      <mirrorOf>grails-core</mirrorOf> 
      <url>https://maven.aliyun.com/repository/grails-core</url>
    </mirror>                
    <mirror>
      <!--This sends everything else to /public -->
      <id>apache snapshots-mirror</id>
      <mirrorOf>apache snapshots</mirrorOf> 
      <url>https://maven.aliyun.com/repository/apache-snapshots</url>
    </mirror> 
    <mirror>
        <id>centit-mirror</id>
        <mirrorOf>centit</mirrorOf>
        <url>http://develop.centit.com/nexus/content/repositories/centit-releases</url>
    </mirror>               
  </mirrors>

加了这一段配置之后,以后就不会去Maven中央仓库上去下载依赖了,而是去阿里巴巴以及其他的仓库下载,这样可以有效提高下载速度。

Maven指令

虽然还有很多其他的配置,那些东西如果现在跟大家说,大家会蒙圈的, 如果有兴趣的小伙伴可以去看作者的其他的相关Maven的文章,有对应的介绍,相信到这里,大家应该大概知道了Maven的一个配置的简介和基本的使用。

接下来我们会介绍maven的一些基础指令。Maven中有一些常见的命令,如果使用Eclipse需要手动敲命令,如果使用IDEA的话,可以不用命令,直接点点点就可以了。

我们主要会针对于以下指令进行分析介绍:

指令 中文含义 备注
mvn clean 清理 这个命令可以用来清理已经编译好的文件
mvn compile 编译 将Java代码编译成Class文件
mvn test 测试 这个命令可以用来项目测试
mvn package 打包 根据用户的配置,将项目打成jar包或者war包
mvn install 安装 手动向本地仓库安装一个jar
mvn deploy 上传 将jar上传到私服

这里需要注意的是,这些命令都不是独立运行的,它有一个顺序。

举个简单例子

我想将jar上传到私服,那么就要构建jar,就需要执行package命令,要打包,当然也需要测试,那就要走mvn test命令,要测试就要先编译,因此,最终所有的命令都会执行一遍。不过,开发者也可以手动配置不执行某一个命令,这就是跳过。一般来是,除了测试,其他步骤都不建议跳过。

当然,如果开发者使用了IDEA,这些命令不用手动敲,点一下就行:


通过命令进行构建项目

可以直接通过命令来构建一个Maven项目,不过在实际开发中,一般使用Eclipse或者IDEA就可以直接创建Maven项目了。

创建命令

shell

复制代码

mvn archetype:generate -DgroupId=org.xxx -DartifactId=xxx -Dar
chetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

看到如下提示,表示项目创建成功:

打包命令

接下来,我们通过mvn package命令可以将刚刚创建的项目打成一个jar包。在打包之前,需要配置DK的版本至少为7以上,因此,我们还需要手动修改一下pom.xml文件,即添加如下配置:

xml

复制代码

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>11</java.version>
    <!-- servlet版本 -->
    <servlet.api.version>4.0.1</servlet.api.version>
    <!-- jackson版本 -->
    <jackson.version>2.13.0</jackson.version>
    <!-- okhttp3版本 -->
    <okhttp.version>3.12.1</okhttp.version>
    <!-- google thumbnailator -->
    <google-thumbnailator.version>0.4.14</google-thumbnailator.version>
    <slf4j-api.version>1.7.32</slf4j-api.version>
    <transmittable-thread-local.version>2.12.2</transmittable-thread-local.version>
    <maven-javadoc-plugin.version>3.3.1</maven-javadoc-plugin.version>
    <maven-gpg-plugin.version>3.0.1</maven-gpg-plugin.version>
    <encoding>UTF-8</encoding>
  </properties>

添加完成后,执行打包命令,注意执行所有命令时,命令行要定位到pom.xml文件所在的目录,看到如下提示,表示项目打包成功。

xml

复制代码

/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/bin/java -Dmaven.multiModuleProjectDirectory=/Users/alex/Documents/code/mine/develop-admin -Djansi.passthrough=true -Dmaven.home=/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3 -Dclassworlds.conf=/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/bin/m2.conf -Dmaven.ext.class.path=/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven-event-listener.jar -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=62462:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/boot/plexus-classworlds.license:/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/boot/plexus-classworlds-2.6.0.jar org.codehaus.classworlds.Launcher -Didea.version=2023.1 -s /Users/alex/Documents/config/maven/settings.xml -DskipTests=true package
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------< com.hyts:develop-archetype >---------------------
[INFO] Building develop-archetype 2.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The POM for com.alibaba:druid:jar:1.1.21 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ develop-archetype ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 20 resources
[INFO] Copying 621 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ develop-archetype ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 213 source files to /Users/alex/Documents/code/mine/develop-admin/target/classes


【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(二)https://developer.aliyun.com/article/1471015

相关文章
|
3月前
|
XML 前端开发 Java
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
这篇文章是SpringMVC框架的入门教程,详细指导了如何在IDEA中使用Maven和Tomcat创建SpringMVC工程,包括添加依赖、配置web.xml、编写控制器、创建配置文件、配置Tomcat服务器以及进行基本的测试,展示了一个简单的Hello SpringMVC示例。
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
|
2月前
|
Java 应用服务中间件 测试技术
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。 本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。 内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。 仅供参考。
240 80
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
|
3月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
53 2
【前端学java】如何从前端视角快速学习Maven
|
3月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
52 1
|
5月前
|
存储 搜索推荐 Java
rodert教你学Maven-实战这一篇就够了(上)
rodert教你学Maven-实战这一篇就够了
50 1
 rodert教你学Maven-实战这一篇就够了(上)
|
3月前
|
设计模式 IDE Java
|
5月前
|
Java 关系型数据库 Maven
SpringBootWebProject学习4、maven打war包
SpringBootWebProject学习4、maven打war包
51 1
|
5月前
|
前端开发 Java 关系型数据库
SpringBootWebProject学习2、默认maven使用
SpringBootWebProject学习2、默认maven使用
30 1
|
5月前
|
XML Java 关系型数据库
SpringBootWebProject学习2、maven配置
SpringBootWebProject学习2、maven配置
55 1
|
4月前
|
Java 应用服务中间件 API
如何安装与使用Java EE 8、Servlet 3.0及Apache Maven进行高效开发
【7月更文第1天】搭建高效Java EE 8开发环境,包括安装JDK、选择WildFly或Payara Server作为应用服务器,以及安装Apache Maven。使用Maven创建Servlet 3.0 Web项目,编写 HelloWorldServlet,打包部署到服务器,通过访问特定URL测试应用。这一流程助力开发者实现快速原型和大型项目开发。
103 0

推荐镜像

更多