首页 > 其他分享 >把 Maven 提交到项目?Maven Wrapper的使用与好处

把 Maven 提交到项目?Maven Wrapper的使用与好处

时间:2024-04-18 09:34:57浏览次数:30  
标签:maven mvnw wrapper Maven Wrapper 提交 mvn

本文收录于 Github.com/niumoo/JavaNotes,Java 系列文档,数据结构与算法!
本文收录于网站:https://www.wdbyte.com/,我的公众号:程序猿阿朗

前言

不知道你有没有发现,如果使用 https://start.spring.io/ 或者使用 IDEA 创建一个 Spring Boot 项目,生成的文件列表中或有 mvnwmvnw.cmd 两个命令文件。如果细心的同学查看隐藏目录,还会发现一个 .mvn 文件夹,那么这几个文件是干嘛的呢?这篇文章介绍它的相关知识。

├── .gitignore
├── .mvn -> 关注
│   └── wrapper
│       ├── maven-wrapper.jar -> 关注
│       └── maven-wrapper.properties -> 关注
├── HELP.md
├── mvnw    -> linux 命令文件
├── mvnw.cmd	-> windows 命令文件
├── pom.xml
└── src
    ├── main
    │   ├── java/com/wdbyte/com/springbootdemo/SpringbootdemoApplication.java
    │   └── resources
    │       ├── application.properties
    │       ├── static
    │       └── templates
    └── test/java/com/wdbyte/com/springbootdemo/SpringbootdemoApplicationTests.java

Maven Wrapper 是什么

上面提到的 mvnw 命令,它的全称是 Maven Wrapper,这是 Maven 提供的一个非常有用的工具,它会自动下载指定版本的 Maven 用于项目构建,而且开发者自由配置 Maven 版本,以此提供一致的构建体验。

mvnw 的命令使用体验和 mvn 完全一致,只需要把 mvn 命令换成 mvnw ,你可以在有 mvnw 文件的 Spring Boot 项目中进行测试。

$ ./mvnw --version
Apache Maven 3.9.5 (57804ffe001d7215b5e7bcb531cf83df38f93546)
Maven home: /Users/darcy/.m2/wrapper/dists/apache-maven-3.9.5-bin/32db9c34/apache-maven-3.9.5
Java version: 21, vendor: Oracle Corporation, runtime: /Users/darcy/develop/jdk-21.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "14.0", arch: "x86_64", family: "mac"

注:windows 环境请使用 mvnw.cmd

Maven Wrapper 官网:https://maven.apache.org/wrapper/

Maven Wrapper 使用场景

设想一下,如果所在的团队同时维护多个项目,不同的项目使用的 JDK 版本不相同,使用的 Maven 版本也不相同,那么为了支持多项目开发,为了构建运行效果一致,你可能需要在本地管理多个 Maven 版本,这会非常繁琐,而 Maven Wrapper 可以轻松的解决这个问题。

Maven Wrapper 的引入解决了下面几个问题:

  • 版本一致性:通过在 mvnw 配置中指定 Maven 版本,确保所有开发人员和持续集成环境使用相同的 Maven 版本。
  • 简化设置:新团队成员或 CI 环境不需要预先安装 Maven,直接运行 mvnw 命令就如安装了 mvn 一样,从而简化了项目的初始设置和配置。
  • 跨平台:Wrapper 是跨平台的,无论是在 Windows 还是在 Unix-like 系统上,都可以以相同的方式执行。

使用 Maven Wrapper 的好处简单的说,可以是 “如果想要使用不同的 Maven 版本进行项目构建,只需在项目中存放一个脚本文件,而不是在本地安装不同的 Maven 版本”。

Maven Wrapper 使用方式

自动生成

如果本地机器已经安装了 Maven ,那么可以在指定项目中通过命令生成 mvnw 命令。

要在现有项目中引入 Maven Wrapper,需要执行如下命令:

mvn -N wrapper:wrapper

也可以指定 maven 版本。

mvn -N wrapper:wrapper -Dmaven=3.9.5

选项 -N 参数表示非递归,因此 Maven Wrapper 只会在项目的当前目录生成,如果项目中有子模块,那么则不会作用到子模块中。

下面我在一个空的 Spring Boot 项目中进行测试。

一个没有 mvnw 的 Spring Boot 项目:

$ ls -l -a
total 16
-rw-r--r--@   1 darcy  staff   395  4 16 21:44 .gitignore
-rw-r--r--@   1 darcy  staff  1249  4 16 21:44 pom.xml
drwxr-xr-x@   4 darcy  staff   128  4 16 21:44 src
drwxr-xr-x   11 darcy  staff   352  4 16 21:50 target

使用 mvn -N wrapper:wrapper 生成 mvnw

$ mvn wrapper:wrapper
[INFO] Scanning for projects...
... 省略日志
[INFO] -------------------< com.wdbyte.com:springbootdemo >--------------------
[INFO] Building springbootdemo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-wrapper-plugin:3.2.0:wrapper (default-cli) @ springbootdemo ---
....省略日志
[INFO] Unpacked bin type wrapper distribution org.apache.maven.wrapper:maven-wrapper-distribution:zip:bin:3.2.0
[INFO] Configuring .mvn/wrapper/maven-wrapper.properties to use Maven 3.6.3 and download from http://mvnrepo.alibaba-inc.com/mvn/repository
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  20.518 s
[INFO] Finished at: 2024-04-16T22:36:16+08:00
[INFO] ------------------------------------------------------------------------

查看目录已经生成。

$ ls -l -a
-rw-r--r--@   1 darcy  staff    395  4 16 21:44 .gitignore
drwxr-xr-x    3 darcy  staff     96  3  8  2023 .mvn
-rwxr-xr-x    1 darcy  staff  11289  3  8  2023 mvnw
-rw-r--r--    1 darcy  staff   7796  3  8  2023 mvnw.cmd
-rw-r--r--@   1 darcy  staff   1249  4 16 21:44 pom.xml
drwxr-xr-x@   4 darcy  staff    128  4 16 21:44 src
drwxr-xr-x   11 darcy  staff    352  4 16 21:50 target
# 查看版本
$ ./mvnw --version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/darcy/.m2/wrapper/dists/apache-maven-3.6.3-bin/c7849ca4/apache-maven-3.6.3
Java version: 21, vendor: Oracle Corporation, runtime: /Users/darcy/develop/jdk-21.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "14.0", arch: "x86_64", family: "mac"

生成的文件说明:

  1. mvnwmvnw.cmd 脚本,分别用于 Unix/Linux 和 Windows 环境。

  2. .mvn/wrapper/mavenwrapper.jar 是 Maven Wrapper 运行时所需的 Jar 文件。

    .mvn/wrapper/maven-wrapper.properties 是配置文件,可以配置 Maven 版本。

然后就可以使用 mvnw 代替 mvn 构建或运行项目了。

./mvnw spring-boot:run

手动复制

通过将上面生成的文件和文件夹复制到一个新项目中,就可以拷贝一份 Maven Wrapper 。

需要拷贝的文件如下:

./
├── .mvn
│   └── wrapper
│       ├── maven-wrapper.jar
│       └── maven-wrapper.properties
├── mvnw
├── mvnw.cmd

手动配置

直接修改 maven-wrapper.properties 中的内容可以修改 Maven 版本,如修改 Maven 版本为 3.9.5,只需要修改 distributionUrl 的值为指定版本的下载地址。

$ cat .mvn/wrapper/maven-wrapper.properties
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar

Maven Wrapper 总结

Maven Wrapper 是一个非常好用的工具,虽然它不是项目的一部分,但是如果把它放到项目中,不仅简化了项目的构建环境配置过程,还为项目构建减少了潜在的问题。如果你还没有在你的项目中使用 Maven Wrapper,不妨考虑尝试一下。将 Maven Wrapper 集成到项目中是一个不错的方式,这样可以跟随项目源码一起管理,可以让所有使用该项目的同学都能得到相同的构建结果。

集成步骤通常如下:

  1. 在项目根目录执行前面提到的命令添加 Maven Wrapper。
  2. 提交生成的 mvnw, mvnw.cmd.mvn/ 目录到版本控制系统。
  3. 更新项目文档,指导团队成员使用 ./mvnw 替代 mvn

参考

  1. https://maven.apache.org/wrapper/

本文收录于 Github.com/niumoo/JavaNotes,Java 系列文档,数据结构与算法!
本文收录于网站:https://www.wdbyte.com/,我的公众号:程序猿阿朗

标签:maven,mvnw,wrapper,Maven,Wrapper,提交,mvn
From: https://www.cnblogs.com/niumoo/p/18142809

相关文章

  • ReferenceError: Cannot access 'pageWrapper' before initialization
    jeecgboot-vue3的ReferenceError:Cannotaccess'pageWrapper'beforeinitialization错误问题问题描述基于jeecgboot-vue3框架进行开发时,不定期在浏览器控制台打印出ReferenceError:Cannotaccess'pageWrapper'beforeinitializationatindex.ts:7:40错误,且页面一......
  • 防止form表单重复提交的几种方案
    form重复提交场景场景1:在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交。具体行为:在网络比较慢的情况下,用户连续快速的点击多次提交按钮。场景2:表单提交后用户点击【刷新】按钮导致表单重复提交。具体行为:用户点击了提交按钮,然后点击浏览器上的【刷新】按钮......
  • Maven多模块中,parent version如何采用自定${version}表示
    背景在Java的开发中,Maven多模块已经成为了一种标配,通过多模块的管理,我们可以更好地组织我们的工程结构,并且更容易进行团队协作。而在Maven的多模块工程中,通常会有一个父模块,而在这个父模块中,我们通常需要指定一些全局的配置,比如依赖管理,插件管理等等信息,这时候就需要用到parentv......
  • maven-search一款鲁班大叔开发的maven依赖搜索神器
    一款好的插件往往能提高我们的开发效率。今天就给大家安利一款maven依赖搜索插件。插件是自己一直关注的鲁班大叔开发的,用了几天真的好用,废话不多说,我们就来看看这是一款什么插件能干什么?在IDEA中,我们可以使用一些插件来帮助我们更好地管理和搜索Jar包。其中,MavenSea......
  • axios 重复提交
    const{default:axios}=require("axios")constqs=require('qs')functionregsoleKey(config){const{method,url,params,data}=config;return[method,url,qs.stringify(params),qs.stringify(data)].join('&')......
  • Maven的下载安装配置
    Maven的下载安装配置Maven是什么Maven是基于项目对象模型(POMprojectobjectmodel),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。通俗的讲maven就是专门用于构建和管理项目的工具,他可以帮助我们去下载我们所需要jar包,帮助我们去管理项目结构,帮......
  • git 提交之前的检查
    要使用pre-commit钩子,你需要执行以下步骤:找到.git/hooks目录:在你的Git仓库中,找到.git/hooks目录。这个目录包含了所有的Git钩子脚本。创建pre-commit钩子文件:在.git/hooks目录下创建一个名为pre-commit的文件。你可以使用任何文本编辑器创建这个文件。编写pre......
  • IDEA中Maven项目修改JSP后通过配置Tomcat实现立即生效
    参考:IDEA中Facets和Artifacts配置说明idea中artifacts、facets、modulesIntelliJIDEA部署Web项目,终于搞懂了传统SpringMvc项目目录和对应tomcat配置如下:在日常开发过程中,我们修改完java代码后,接着就点击Build编译,然后就可以去验证代码了(前提是On'Update'Action选......
  • 本地升级idea后,不能向github上提交代码问题处理
    问题现象:本人自己电脑之前一直使用idea2018.1商业破解版,之前有简历本地代码仓库,并在github上建立了关联的远程代码仓库。最近本人在本地升级一下idea,从idea2018.1商业版升级到2023.1.5社区版本(idea支持win7的版本基本就到2023.1这个版本了,目前本人尝试安装了2023.1.5和2023.1.3......
  • Git 提交 Umi Max 项目报错:Invalid commit message format
    Git提交UmiMax项目报错:Invalidcommitmessageformat1、发现问题使用UmiMax构建的项目,commit(提交)时报错!.2、分析问题⚠️提交信息需要满足某些固定的消息格式。1、项目根目录的.umirc.ts文件中verifyCommit属性用于验证commitmessage信息。.2、配置文件......