mvnw,到底是什么鬼?
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.
不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。
使用 start.spring.io
生成项目,会发现里面有 mvnw
和 mvnw.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
在里面啊。
深处国内,对付这玩意最好的方式,那就是:
删掉它!
删掉它!
删掉它!
即使它的初衷如何好,目标是如何宏大,还是要毫不留情的干掉它。
曾经有个小弟,使用mvnw下载了一下午的jar包,最后茫然的向我吐槽:公司的maven私服太慢了。
不能背这个锅。
一个好的项目,不会依赖特定的打包工具。这算是maven项目偷懒出的插件,因为一个基础工具,有一个点必须要做到,那就是向后兼容。
搞出这么个工具,连个CDN都舍不得弄,这不是方便开发人员,而是给开发人员添乱。
更要命的是,企业内部都是自己搭建maven私服的,有自己的配置文件和账号。使用这个玩意,还得需要知道maven下载在哪了,找到以后替换它的配置文件。典型的管生不管养啊。
当然了, gradle
也是一个德行。
所以,xjjdog的处理方式是,看到 mvnw
和 .mvn
这些文件,第一时间就毫不留情的干掉它。
虽然我很残忍,辜负了作者的一片好心。但深处这样的网络环境之中,我也是无奈之举啊。
作者简介: 小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。
推荐阅读:
▼
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK