• maven-wrapper介绍


    maven-wrapper的应用

    使用https://start.spring.io/生成Spring Boot初始项目时,发现其中有几个奇怪的文件

    ├── .mvn 
    
    │   └── wrapper 
    
    │       ├── maven-wrapper.jar 
    
    │       └── maven-wrapper.properties 
    
    ├── mvnw 
    
    └── mvnw.cmd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    maven-wrapper干嘛用的?

    先来看看传统maven的使用流程

    • 传统使用maven需要先到官网上下载
    • 配置环境变量把mvn可执行文件路径加入到环境变量,以便之后使用直接使用mvn命令。
    • 另外项目pom.xml文件描述的依赖文件默认是下载在用户目录下的.m2文件下的repository目录下。
    • 再次,如果需要更换maven的版本,需要重新下载maven并替换环境变量path中的maven路径。

    现在有了maven-wrapper,会获得以下特性

    • 执行mvnw比如mvnw clean ,如果本地没有匹配的maven版本,直接会去下载maven,放在用户目录下的.m2/wrapper中
    • 并且项目的依赖的jar包会直接放在项目目录下的repository目录,这样可以很清晰看到当前项目的依赖文件。
    • 如果需要更换maven的版本,只需要更改项目当前目录下.mvn/wrapper/maven-wrapper.properties的distributionUrl属性值,更换对应版本的maven下载地址。mvnw命令就会自动重新下载maven。
    • 可以说带有mvnw文件的项目,除了额外需要配置 java环境外,只需要使用本项目的mvnw脚本就可以完成编译,打包,发布等一系列操作。

    在项目初始化mvnw文件

    如果你的项目没有mvnw文件,需要先下载maven,并把mvn可执行文件路径需加入的PATH中。然后执行以下命令,就会自动生成mvnw相关一系列文件

    mvn -N io.takari:maven:wrapper
    
    • 1

    idea对maven-wrapper的支持

    idea提供了插件maven-wrapper-support 这个插件会监测项目下的.mvn/wrapper/maven-wrapper.properties中的distributionUrl属性值,且自动下载maven版本到用户目录.m2/wrapper目录中,并且改变setting->build->build Tools ->maven-> maven home directory的值。 但是这个插件并不会改变setting->build->build Tools->maven->Local repository的值;点击Navigation Bar中的maven projectjs中的命令,执行的命令是原生mvn的命令,而不是项目中下的mvnw命令。

    不足

    项目目录下的.mvn/wrapper/maven-wrapper.properties的distributionUrl默认值是

    https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip
    
    • 1

    在执行mvnw命令下载有点慢,建议替换为

    http://www-us.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.zip
    
    • 1

    说说自己的看法

    • maven wrapper可以自动下载maven,但实际上我们常用的idea软件都自带了maven。
    • 且如果用上了idea,一般习惯也是直接使用Navigation Bar执行maven命令比较方便。
    • maven wrapper根据配置自动切换maven版本。这个看起来很有用,但实际上maven版本也是很稳定。很少会出现需要切换maven版本的情况
    • 使用mvnw命令会在直接当前项目下生成repository,看起来每一个项目独立了repository,很模块化的样子。但是这样不仅浪费了磁盘空间,且实际上开发中并不关心repository,idea会自动有external librayies目录提供查看依赖的jar包。
    • 当然,如果纯命令行工作,这会是个不错的选择。
  • 相关阅读:
    #ifndef 与 #program once
    Matplotlib(三)通过plt.subplots创建子绘图
    GIS工具maptalks开发手册(三)01——绘制工具
    【Android】Android应用性能优化总结
    软件工程毕业设计课题(28)基于JAVA毕业设计JAVA教室实验室预约系统毕设作品项目
    SpringBoot后台管理系统框架
    大数据ClickHouse(十一):MergeTree系列表引擎之AggregatingMergeTree
    k8s1.25如何设置docker代理
    单机、集群和分布式
    数据库及ADO.NET学习(六)
  • 原文地址:https://blog.csdn.net/m0_67391401/article/details/126435184