当前位置: 首页 > 科技观察

Mvnw,这到底是什么?

时间:2023-03-12 00:09:18 科技观察

本文转载自微信公众号“小姐姐的味道”,作者小姐姐养的狗。转载本文请联系味觉小姐公众号。使用start.spring.io生成工程,会发现mvnw和mvnw.cmd两个文件。两个文件加起来20多kb。我的代码没有超过20行,所以我就把这两个文件放在一起,它们是干什么用的?这到底是什么?正式来说,它是maven的包装器。当找不到maven的时候,会自动下载一个。;或者,如果你的项目maven与你环境中的mavne不兼容,它会自动下载一个。这不是很好笑吗?不知道我现在是不是在局域网深处?我们尝试执行传统的mvn命令,可以看到它使用mvnw来替换自己。~/codes/$mvn-Dmaven.test.skip=true-PdevpackageexecutingmvnwinsteadofmvnExceptioninthread"main"java.util.zip.ZipException:errorinopeningzipfileatjava.util.zip.ZipFile.open(NativeMethod)atjava.util.zip.ZipFile.(ZipFile.java:225)atjava.util.zip.ZipFile.(ZipFile.java:155)atjava.util.zip.ZipFile.(ZipFile.java:169)atorg.apache.maven.wrapper.Installer.unzip(Installer.java:169)atorg.apache.maven.wrapper.Installer.createDist(Installer.java:86)atorg.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:121)atorg.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:61)但是等了半天,日志没有往下滚动。等了十几分钟,终于有输出了,报错。然后每次我运行它,我都会得到一个错误。闹腾了,也到了让它显露本色的时候了。使用ps命令查找其启动参数。这时我才发现,它除了mvnw文件外,还偷偷把.mvn目录放到了工程中。好家伙,这是一个完整的64kb。#ps-ef|grepmvnjava-classpath~/codes/.mvn/wrapper/maven-wrapper.jar-Dmaven.home=~/codes-Dmaven.multiModuleProjectDirectory=~/codesorg.apache.maven.wrapper.MavenWrapperMain-Dmaven.test.skip=true-Pdevpackage这个真是多此一举,最好不要。如果您愿意,只需将apachemaven放入其中即可。在国内,对付这个东西最好的办法就是:删掉!删除它!删除它!不管它的初衷多么好,目标多么远大,还是要毫不留情的将它杀死。曾经有个小弟用mvnw下载了一个下午的jar包,最后迷迷糊糊向我抱怨:公司的maven私服太慢了。不能背这个罪。一个好的项目不依赖于特定的打包工具。这是maven项目偷懒的一个插件,因为一个基础的工具有一点是必须要做到的,那就是向后兼容。搞出这样一个工具,连CDN都舍不得弄。这不是为了方便开发者,而是为了开发者。更要命的是,公司自己搭建maven私服,有自己的配置文件和账号。要用这个东西,需要知道maven下载在哪里,找到配置文件以后替换。典型的管理层不关心加薪。当然,gradle也是一种美德。所以xjjdog对它的处理方式是一看到mvnw和.mvn文件就毫不留情的杀死它。我虽然狠心,却辜负了作者的良苦用心。但是深陷在这样的网络环境中,我也是别无选择。作者简介:品味小姐姐(xjjdog),一个不允许程序员走弯路的公众号。专注于基础架构和Linux。十年架构,每天百亿流量,与你探讨高并发世界,给你不一样的滋味。我的个人微信xjjdog0,欢迎加好友进一步交流。