18

mvnw,到底是什么鬼?

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzA4MTc4NTUxNQ%3D%3D&%3Bmid=2650522321&%3Bidx=1&%3Bsn=3bd4d0c621553b39a13bd8c758d64f7a
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

e6JBVrU.gif!mobile

不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。

使用 start.spring.io 生成项目,会发现里面有 mvnwmvnw.cmd 两个文件。两个文件加起来有20多kb。

我代码还没超过20行呢,就整上这样两个文件,做什么用呢?到底是什么鬼?

官方说,它是 maven 的一个 wrapper ,在找不到maven的时候,它会自动下载一个;或者,碰到你的项目maven和你环境里的mavne不兼容,它也会自动下载一个。

这不是在搞笑么?不知道我现在身处局域网深处么?

我们尝试执行一下传统的mvn命令,可以看到它使用mvnw去替换了自己。

~/codes/ $ mvn -Dmaven.test.skip=true -Pdev package
executing mvnw instead of mvn

Exception in thread "main" java.util.zip.ZipException: error in opening zip file
	at java.util.zip.ZipFile.open(Native Method)
	at java.util.zip.ZipFile.<init>(ZipFile.java:225)
	at java.util.zip.ZipFile.<init>(ZipFile.java:155)
	at java.util.zip.ZipFile.<init>(ZipFile.java:169)
	at org.apache.maven.wrapper.Installer.unzip(Installer.java:169)
	at org.apache.maven.wrapper.Installer.createDist(Installer.java:86)
	at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:121)
	at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:61)

但是但是,等了良久,日志也没有向下滚动。等了十几分钟,好不容易有输出了,结果报错。然后接下来每次运行都报错。

聒噪的很,是时候要让它露出真面目了。

使用 ps 命令,找到了它的启动参数。这才发现,除了 mvnw 文件,它还偷偷的在项目中放了 .mvn 目录,好家伙,足足有 64kb

# ps -ef| grep mvn
java -classpath ~/codes/.mvn/wrapper/maven-wrapper.jar -Dmaven.home=~/codes -Dmaven.multiModuleProjectDirectory=~/codes  org.apache.maven.wrapper.MavenWrapperMain -Dmaven.test.skip=true -Pdev package

这可真是多此一举,不如不举。你要是贴心,直接塞个 apache maven 在里面啊。

深处国内,对付这玩意最好的方式,那就是:

删掉它!

删掉它!

删掉它!

JNb6niE.png!mobile

即使它的初衷如何好,目标是如何宏大,还是要毫不留情的干掉它。

曾经有个小弟,使用mvnw下载了一下午的jar包,最后茫然的向我吐槽:公司的maven私服太慢了。

不能背这个锅。

一个好的项目,不会依赖特定的打包工具。这算是maven项目偷懒出的插件,因为一个基础工具,有一个点必须要做到,那就是向后兼容。

搞出这么个工具,连个CDN都舍不得弄,这不是方便开发人员,而是给开发人员添乱。

更要命的是,企业内部都是自己搭建maven私服的,有自己的配置文件和账号。使用这个玩意,还得需要知道maven下载在哪了,找到以后替换它的配置文件。典型的管生不管养啊。

当然了, gradle 也是一个德行。

所以,xjjdog的处理方式是,看到 mvnw.mvn 这些文件,第一时间就毫不留情的干掉它。

虽然我很残忍,辜负了作者的一片好心。但深处这样的网络环境之中,我也是无奈之举啊。

作者简介: 小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

推荐阅读:

一图解千愁,jvm内存从来没有这么简单过!

失联的架构师,只留下一段脚本

架构师写的BUG,非比寻常

nginx工程师,需要上承天命,下召九幽

实力解剖一枚挖矿脚本,风骚操作亮瞎双眼

又一P1故障,锅比脸圆

传统企业的人才们,先别忙着跳“互联网”!

面试官很牛,逼我尿遁

又一批长事务,P0故障谁来背锅?

一天有24个小时?别开玩笑了!

《程序人生》杀机!

可怕的“浏览器指纹”,让你在互联网上,无处可藏

2w字长文,让你瞬间拥有「调用链」开发经验

996的乐趣,你是无法想象的

作为高级Java,你应该了解的Linux知识(非广告)

必看!java后端,亮剑诛仙(最全知识点)

学完这100多技术,能当架构师么?(非广告)

Linux上,最常用的一批命令解析(10年精选)

数百篇「原创」文章,助你完成技术「体系化」

EnUneen.gif!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK