該命令包含了 package 命令功能,不但會(huì)在項(xiàng)目路徑下生成 class 文件和 jar 包,同時(shí)會(huì)在你的本地maven倉(cāng)庫生成 jar 文件,供其他項(xiàng)目使用(如果沒有設(shè)置過maven本地倉(cāng)庫,一般在用戶 /.m2 目錄下。如果 a 項(xiàng)目依賴于 b 項(xiàng)目,那么 install b 項(xiàng)目時(shí),會(huì)在本地倉(cāng)庫同時(shí)生成 pom 文件和 jar文件,解決了上面打包 package出錯(cuò)的問題)。
Build過程往往會(huì)生成發(fā)布包,這個(gè)具體要看對(duì) IDE 的配置了,Build在實(shí)際中應(yīng)用很少,因?yàn)殚_發(fā)時(shí)候基本上不用,發(fā)布生產(chǎn)時(shí)候一般都用ANT等工具來發(fā)布。Build 因?yàn)橐烤幾g,還要執(zhí)行打包等額外工 作,因此時(shí)間較長(zhǎng)。
site
生成項(xiàng)目的站點(diǎn)文檔。
deploy(常用)
部署。將 jar 包部署到遠(yuǎn)程倉(cāng)庫,通常是私有倉(cāng)庫。而且包含了 install 命令的功能。
二、打包后,無法 import?
下面介紹一下我用常規(guī)打包方式遇到的問題。
我通過 IDEA 工具創(chuàng)建了一個(gè) SpringBoot 項(xiàng)目,然后 pom.xml 文件中會(huì)自動(dòng)引入一個(gè)打包插件,如下圖所示:
然后我執(zhí)行 maven package 命令,會(huì)在項(xiàng)目的 target 目錄生成一個(gè) JAR 包。如下圖所示:
然后我做了以下事情:
把這個(gè) JAR 包拷貝出來,發(fā)給了第三方。
讓第三方拷貝到他們自己的本地項(xiàng)目中。這里是在項(xiàng)目的根目錄創(chuàng)建了一個(gè) libs 目錄,然后將 jar 包放到 libs 目錄中。
讓第三方在 pom 依賴中引入這個(gè)依賴包。
scope 指定為 system,表示引入指定路徑(systemPath配置)下的 JAR 包。
看起來這么做沒問題了,但是當(dāng)我們 import 這個(gè) JAR 包下的類時(shí),就會(huì)報(bào)錯(cuò)。如下圖所示:
很奇怪,這里為什么會(huì)報(bào)錯(cuò)呢??
先看下這個(gè) JAR 包是否引入了。如下所示,可以看到確實(shí)是正確引入了,沒有報(bào)錯(cuò)。
通過 research,發(fā)現(xiàn)這個(gè)打包插件打出來的 JAR 包,是供執(zhí)行的,也就是可以通過 java -jar 命令來運(yùn)行這個(gè) JAR 包,并不能給第三方來引用使用。