mvnw,到底是什么鬼?
不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号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这些文件,第一时间就毫不留情的干掉它。
虽然我很残忍,辜负了作者的一片好心。但深处这样的网络环境之中,我也是无奈之举啊。
- OJ 里面的 G++ 和C++ 到底有什么区别, 为什么有时候G++能过,C++不能过,而有时候C++能过,G++不能过?
- 全球存储观察:联想到底在想什么?
- 当我们在谈论机器学习时我们到底在谈些什么
- 拿住币到底有什么了不起?
- 流量星球:QQ群控到底是什么丨企业为什么要选择他?
- 到底什么是过拟合?
- WebAPi返回类型到底应该是什么才合适,这是个问题?
- 糊糊论道--不患寡而患不均到底是个什么社会?
- 总结:composer的install和require和update指令。到底什么时候用什么指令
- 搞不明白MSN到底在背后干了些什么?
- 大侠口中的并发到底是什么
- Java中字符流和字节流到底有什么区别!!!
- 到底什么是android虚拟机 (dalvik, art)
- 中国人,你到底需要抗议什么?
- 爱一个人,到底是爱他什么?
- 北漂自述:我到底为了什么活在这儿?
- 我到底做错什么了。。。1029
- SSM-MyBatis-06:Mybatis中openSession到底做了什么
- 产品经理的职责有哪些?到底该做什么?(转) 写的非常好,非常专业
- MVC和MVP到底有什么区别呢?