开局一张图,学一学项目管理神器Maven!

2023-12-25 18:08

本文主要是介绍开局一张图,学一学项目管理神器Maven!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Maven强大的Java工程构建工具,做Java开发时少了跟Maven打交道,之前在知乎上看到有人提问:“学Java开发需不需要学习Maven?”,个人认为是必需要学的,这和工欲善其事必先利其器是一个道理,开发软件也要先把工具学好才能事半功倍啊。所以最近花了一点时间,将Maven的基础知识整理成一张脑图:

16f13d2474bdd03e?w=935&h=561&f=png&s=39896

这篇文件主要简单介绍一些Maven中的概念,文章大致内容如下:

  • 安装maven
  • 配置maven
  • maven的命令语法
  • maven的构建征集周期

其他的一些高级特性如依赖、插件、settings部分留待之后再整理成。

安装Maven

好看的小说 www.shupu.org

安装Maven的步骤非常简单、快速,安装之前先确认JAVA_HOME环境变量是否指向JDK主目录可以使用echo命令输出JAVA_HOME目录:

echo $JAVA_HOME

如果输出为空说明JAVA_HOME未设置或指向不正确,可以使用export导出JAVA_HOME变量:

export JAVA_HOME=/path/to/java_home/

要使JAVA_HOME变量开机生效,可以将JAVA_HOME=/path/to/java_home/放入.profile.bash_profile视机器环境而定。

设置好JAVA_HOME环境变量后,就可以安装Maven了:

  1. 下载 apache-maven-3.6.3-bin.zip
  2. 使用unzip命令解压apache-maven-3.6.3-bin.zip压缩文件
  3. 添加一个MAVEN_HOME环境变量,指向解压后的apache-maven-3.6.3-bin目录
  4. MAVEN_HOME/bin添加PATH环境变量中

下载 Maven

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip

解压 Maven

unzip apache-maven-3.6.3-bin.zip

设置MAVEN_HOME环境变量

cd apache-maven-3.6.3
pwd #查看当前目录
export MAVEN_HOME=/Users/yjwfn/bin/apache-maven-3.6.3

设置PATH环境变量

export PATH=$PATH:$MAVEN_HOME/bin

以上配置只是当前shell终端生效,要每次开机自动设置需要将以上命令放入~/.bash_profile~/.profile中,本文使用~/.bash_profile(不同的机器名称会不一样,Linux一般叫~/.profile):

vi ~/.bash_profile

将以下命令复制到文件中:

export MAVEN_HOME=/Users/yjwfn/bin/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin
验证安装

使用which mvn命令验证安装是否正确,查看输出mvn位置是否正确:

liuweideMacBook-Pro:bin yjwfn$ which mvn
/Users/yjwfn/bin/apache-maven-3.6.3/bin/mvn

使用mvn -v查看安装的 Maven 版本是否正确(因为有些系统会自带 Maven):

liuweideMacBook-Pro:bin yjwfn$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/yjwfn/bin/apache-maven-3.6.3
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"

运行 Maven

运行 Maven 命令的基本样式由optionsgoal(s)phase(s)组成:

mvn [options] [<goal(s)>] [<phase(s)>]

所有的options可以使用mvn -h查看:

liuweideMacBook-Pro:bin yjwfn$ mvn -husage: mvn [options] [<goal(s)>] [<phase(s)>]Options:-am,--also-make                        If project list is specified, also....

Maven 命令的重点是goal(s)phase(s)这两个概念,字面意思注是目标、阶段的意思。他们的使用和另外一个概念life cycles有关,后面会详细解释。现在只需要明白一条Maven命令由多个optionsgoal(s)phase(s)组成。

Maven配置

Maven 有三个可以修改配置的地方:

  • MAVEN_OPTS 环境变量:向全局Maven提供额外的选项,如JVM配置参数-Xms256m -Xmx512m
  • settings.xml:文件位于USER_HOME/.m2目录中,向多个Maven项目提供统一的配置
  • .mvn目录:该目录位工程目录根目录中,是个隐藏的文件
    • extensions.xml
    • maven.config
    • jvm.config
MAVEN_OPTS 使用

MAVEN_OPTS是一个环境变量,默认是空的。为测试将MAVEN_OPTS设置成-h

export MAVEN_OPTS=-h #加个-h选项

然后执行mvn不带任务参数就打印出usage:

用法: java [-options] class [args...](执行类)或  java [-options] -jar jarfile [args...](执行 jar 文件)

注意: 仔细一看这个usage其实是Java命令输出的java -h

iuweideMacBook-Pro:bin yjwfn$ java -h
用法: java [-options] class [args...](执行类)或  java [-options] -jar jarfile [args...](执行 jar 文件)

测试java -h与将MAVEN_OPTS设置成-h然后执行mvn打印出来的效果一致,所以MAVEN_OPTS大家应该知道怎么用了吧!要往JVM传递参数可以通过MAVEN_OPTS变量设置

settings.xml 文件

settings.xml 可以放在两个地址:

  • $MAVEN_HOME/conf/settings.xml
  • USER_HOME/.m2

$MAVEN_HOME就是安装步骤中设置的环境变量,settings.xml的加载可以打开--debug选项查看:

mvn --debug
# 部分控制台输出
[DEBUG] Reading global settings from /Users/yjwfn/bin/apache-maven-3.6.3/conf/settings.xml
[DEBUG] Reading user settings from /Users/yjwfn/.m2/settings.xml

如控制台输出一样,会在$MAVEN_HOMEUSER_HOME/.m2中加载两个settings.xml文件。settings.xml的配置项非常多,就不详细说明了可以查看官方文档。

16f12daf74321824?w=836&h=704&f=png&s=58806

.mvn目录

.mvn目录位于工程根目录中,是工程级的配置一般包含三个配置文件:

  • extensions.xml
  • maven.config
  • jvm.config
Maven Extensions

extensions.xml是为了使开发者更方便的使用Extensions功能建立的配置文件,Extensions是一种添加库到Core Classloader的方式Maven主要有四类System Classloader -> Core Classloader -> Plugin Classloaders -> Custom Classloaders由于CloassLoader都是双亲委派模式,所以添加到Core Classloader中的库可以在Plugin ClassloadersCustom Classloaders中使用:

16f12f848e20e1c4?w=1312&h=938&f=png&s=122343

extensions.xml的配置演示:

extensions.xml这个配置文件就是声明哪些库需要添加到Core Classloader中,如下声明将guava添加到Core Classloader中:

<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd"><extension><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></extension>
</extensions>
maven.config

maven.config主要用于添加通用选项,在执行mvn命令时会将maven.config中配置的命令options添加到命令中。

新建个maven.config文件,内容如下:

-v

直接执行mvn不带任何选项,由于在maven.config中有-v选项,所以打出的内容就是mvn -v

liuweideMacBook-Pro:.mvn yjwfn$ mvn
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/yjwfn/bin/apache-maven-3.6.3
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"
liuweideMacBook-Pro:.mvn yjwfn$
jvm.config

jvm.config是配置JVM参数的文件,很容易理解就不多说了。

Maven 构建生命周期

构建生命周期就Maven较核心的概念, Maven有三个内置的构建生命周期分别为:cleandefaultsite

构建阶段(Build Phase)

在Maven中一个生命周期由一系列Build Phase组成,而每个生命周期都会有很多Build Phasedefault生命周期由以下Build Phase组成:

  • validate -确认项目正确并且所有必要的信息均可用
  • compile -编译项目的源代码
  • test-使用合适的单元测试框架测试编译后的源代码。这些测试不应要求将代码打包或部署
  • package -获取编译后的代码,并将其打包为可分发的格式,例如JAR。
  • verify -对集成测试的结果进行任何检查,以确保符合质量标准
  • install -将软件包安装到本地存储库中,以作为本地其他项目中的依赖项
  • deploy -在构建环境中完成后,将最终软件包复制到远程存储库中,以便与其他开发人员和项目共享。

这些生命周期阶段(加上此处未显示的其他生命周期阶段)将顺序执行以完成default生命周期。给定上面的生命周期阶段,这意味着当使用default生命周期时,Maven将首先验证项目,然后尝试编译源代码,针对测试运行源代码,打包二进制文件(例如jar),针对该源运行集成测试软件包,验证集成测试,将经过验证的软件包安装到本地存储库,然后将已安装的软件包部署到远程存储库。

插件目标(Plugin Goals)

Build Phase只是定义一些软件构建的流程,它不会直接去构建工程,这些构建流程的实施都是由插件来做的,构建生命周期可以这样理解一个生命周期由多个构建阶段组成,每个构建阶段都会被多个插件目标绑定,用一张图表示他们之间的关系:

16f13c447d0ac41c?w=701&h=525&f=png&s=25151

图中的jar:jarinstall:installplugin:goal的意思,冒号的前面部分是插件名称,后面是目标名称。由上图可知当执行mvn install的命令时,会执行default生命周期中的install阶段(同时在install之前的阶段也会执行),由于install:install目标绑定到了install phase,所以install:install目标也会执行,这样就通过install插件来完成打包功能。

总结

Maven是非常流行的构建工具,下一代构建工具Gradle也有一些点是借鉴了Maven。文中所提到的点只是Maven工具的一部分知识,Maven还有很多强大的功能如:依赖管理、插件管理、多工程等功能,后续再整理这些高级功能与大家分享。


公众号《架构文摘》每天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性能、高稳定)、大数据、机器学习、Java架构等各个热门领域。

16ef8090f5cbd1fe?w=258&h=258&f=jpeg&s=17535

这篇关于开局一张图,学一学项目管理神器Maven!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/536440

相关文章

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

springboot+maven搭建的项目,集成单元测试

springboot+maven搭建的项目,集成单元测试 1.在pom.xml文件中引入单元测试的依赖包 <!--单元测试依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></depen