mvnw,到底是什麼鬼?

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,到底是什麼鬼?

即使它的初衷如何好,目標是如何宏大,還是要毫不留情的幹掉它。

曾經有個小弟,使用mvnw下載了一下午的jar包,最後茫然的向我吐槽:公司的maven私服太慢了。

不能背這個鍋。

一個好的項目,不會依賴特定的打包工具。這算是maven項目偷懶出的插件,因爲一個基礎工具,有一個點必須要做到,那就是向後兼容。

搞出這麼個工具,連個CDN都捨不得弄,這不是方便開發人員,而是給開發人員添亂。

更要命的是,企業內部都是自己搭建maven私服的,有自己的配置文件和賬號。使用這個玩意,還得需要知道maven下載在哪了,找到以後替換它的配置文件。典型的管生不管養啊。

當然了,gradle也是一個德行。

所以,xjjdog的處理方式是,看到mvnw和.mvn這些文件,第一時間就毫不留情的幹掉它。

雖然我很殘忍,辜負了作者的一片好心。但深處這樣的網絡環境之中,我也是無奈之舉啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章