1. 程式人生 > >【idea】生成Jar包

【idea】生成Jar包

用idea打jar包非常方便

我們先看看例項專案

在這裡插入圖片描述
這個專案裡包括
一個數據檔案,位於’data/data’
一個自定依賴庫,位於’lib/’下
還有一個主java檔案,位於‘src/MyClass.jar’
(如何新增jar包請訪問Intellij IDEA 新增jar包的三種方式

然後我們開始打jar包

1.首先開啟project structure
在這裡插入圖片描述

2.然後按下圖順序點選
在這裡插入圖片描述

3.對於彈出的介面有兩種打jar包的方式
在這裡插入圖片描述
最上面的module指的就是相對哪個專案打包
第二行的main class 就是指定主類
下面的JAR files from libraries有兩個選項,這個是用來決定如何處理我們自己新增的第三方依賴庫的,比如我的專案裡包含了java連結mysql的依賴包
第一個選項extract to …,指的是,將全部依賴包和你自己寫好的java程式碼,都打進一個包裡,也就是最終只會輸出一個jar包
第二個選項copy to the output …,指的是,將依賴包和自己寫好的程式碼打到不同的jar包裡,並且這些jar包的依賴聯絡是根據一個自動生成的anifest檔案聯絡起來的,例如,如果專案有兩個依賴jar檔案,那麼最終輸出的jar一共有三個,分別自己寫的java程式碼組成的一個jar和另外兩個依賴jar

假設我們選第一個extract to target JAR,點選ok

3.jar內檔案設定
之後我們便來到了關鍵的最難以看明白的一步
下圖中,最上面的name指的是這個Aritifacts的名稱(注意這不是輸出jar的名稱)
中間的Output directory指的是輸出的路徑
圖中左邊紅框,即區域1代表的是最終輸出的東西是什麼樣的
可以看到區域1裡有一個jar_test.jar,這個就是基於我們寫的程式碼輸出的一個jar包,可以改名字哦,右鍵‘jar_test.jar’可以看到rename,點選就可以改名字了
這個jar包裡還有兩行,第一行指的是“從xxx.jar中抽取的東西”,因為之前我們選的是extract to target JAR;第二行內容指的是,我們的java程式碼編譯後的輸出,也就是我們寫的各種package和class啦。
在區域1選中jar包的情況下,圖最下面會有我們打jar包的manifest檔案相關資訊,沒錯,不管以哪種方式打jar包,manifest檔案都會生成
在這裡插入圖片描述

區域2是可用元素,就是說目前還可以把什麼東西新增到jar包裡,那個lib是我自己設定的一個庫,不懂的話可以忽略,目前沒什麼可以新增的,我們來做個實驗
在這裡插入圖片描述

於是就變成了下圖這樣,左邊的東西跑到右邊了,加回來的方式有兩種,要麼雙擊跑到右邊的’jar_test’ complie output,要麼點選那個加號,然後點選module output,就不截圖了
在這裡插入圖片描述

好我們再把那個“Extracted ‘mysql-…’”給“減掉”,操作與上面一樣,選中之後點選“-”,會發現這個東西沒有跑到右邊去,如下圖所示,別慌
在這裡插入圖片描述

點選加號後選中Extracted Directory
在這裡插入圖片描述
會出現如下所示的一個對話方塊,沿著路徑自己找到那個被刪除的jar包,點選OK,他就回來了,以這種方式我們還可以新增其他的jar包
在這裡插入圖片描述

4.別急,如果想要把資料打進去怎麼辦
可以看到我們這個jar包裡現在並沒有上面用到的資料檔案,接下來需要把data目錄下的檔案打入jar包,操作與上面類似,點選“+”後,選擇Directory Content,意思就是把某個資料夾裡的全部內容打到jar裡
在這裡插入圖片描述

在彈出的框裡找到目標資料夾並選中,注意這時選中的是資料夾,點選OK就可以了
在這裡插入圖片描述

5.大功告成
點選下面的Apply,或者OK
然後點選導航欄中的Build,然後選中Build Aritifacts
在這裡插入圖片描述

出現如下這麼個東西,左邊的jar_test:jar,就是這個artifacts的名字,上面我們提到過,第一次點Build,再次編譯點rebuild
在這裡插入圖片描述

之後就可以在artifact中設定對應的路徑找到我們打好的jar包了

6.注意
在步驟3中,如果我們選中的是“copy to the output…”的話,其他的設定也是大同小異,可以自己嘗試
另外如果某個module要重新設定或者新增artifacts的話,有時候會報錯“MANIFEST.MF already exists in VFS”,要把上一次生成的MANIFEST.MF檔案徹底刪除就行,不僅要丟進回收站後,還要在回收站內刪除