利用IDEA和exe4j生成exe檔案及資原始檔和so、dll檔案的放置

柴月和岐月發表於2017-09-04

 

在網上搜尋大部分文章,發現並不能完全解決自己的問題時,遂自己摸索,然後總結寫下此文。

在貼出具體步驟前,我們需要先換位思考下,假如我們是設計者我們該如何讓一個java專案展現在使用者面前呢

1.首先得有個java環境吧,才能在jvm上跑你的虛擬機器(jre資料夾)

2.跑你的專案,jvm首先得知道你寫了啥程式碼吧(jar包),並且知道這個專案的入口在哪(main函式)

3.假如你專案裡用了一些圖片音樂,或者三方庫資源(三方jar包,so庫,dll檔案等),你也得告訴jvm在哪裡找吧

基於以上三點,我們帶著上面的思考來一步一步做吧

 

1.提取出我們寫的程式碼

開啟File -> Project Structure,如下圖。

依次點選圖中的按鈕出現“Empty”和"From modules with dependencies"兩個選項。

個人見解:其中Empty只會匯出你自己寫的程式碼並且已經編譯好了,而不會匯出你使用的三方jar包裡面的程式碼,雖然你可以手動新增進去,不過只是以新增檔案的形式新增進去,並不會給你編譯好,如下圖

而"From modules with dependencies"選項則會直接幫我們把所以程式碼(你自己寫的和三方引用的)直接放在一起編譯,同時直接生成Mainfest檔案,可以說是非常快捷的一種方式了,同時體積自然比上一種要大很多,如下圖

讓我們來看看兩個選項的區別吧

然後我們回到程式設計介面,點選,點選生成我們的jar包檔案,當然build和rebuild都可以的,我們生成的jar包檔案在之前系統自動給我們設定的地址中(Output directory),假如你沒有更改的話是在這裡,

我們直接複製貼上到桌面即可,當然,為了方便我們還是創一個“SoundTool”的資料夾放它

2.提取我們所用到的資原始檔和so庫

在這裡需要提的就是,在專案裡引用的資原始檔(當然是你直接放在專案裡的,比如resource資料夾下)都是使用相對路徑的。

題外話,我們在使用URL時經常訪問本地地址,這個時候就需要加上“file:///”,"file://"是固定格式,代表是本地檔案,而第三個"/"則代表是檔案系統的根目錄比如“file:///C:/dir”什麼的。

而在專案裡面我們訪問的時候則不需要這麼複雜,可以像“src/main/resources/imgs”這麼呼叫,因為沒有“/”號則代表的是專案所在的相對路徑,所以假如你在專案裡引用了資原始檔的話你就需要把檔案拿出來,並且放置的位置切合你程式碼裡設定的路徑,不然程式會找不到

在資原始檔設定好了之後,我們就可以考考三方so庫和dll檔案的事了。因為在匯出jar包的時候,so庫和dll檔案並未參與編譯,但是不要慌,設計者們早就考慮好了,讓我們們生成exe檔案的時候可以讓他們參與連線,讓exe檔案可以知道在哪裡去呼叫他們(感覺其實就是新增了放置so庫和dll檔案的路徑),所以現在我們得先把他們拿出來。

好了,讓我們進入最為複雜的一步吧

3.生成exe檔案

首先,你需要一個exe4j的程式,程式可以直接百度找到官網下載,下載方式和安裝程式非常簡單,這裡不過多敘述。

註冊碼如下:
A-XVK258563F-1p4lv7mg7sav
A-XVK209982F-1y0i3h4ywx2h1
A-XVK267351F-dpurrhnyarva
A-XVK204432F-1kkoilo1jy2h3r
A-XVK246130F-1l7msieqiwqnq
A-XVK249554F-pllh351kcke50
A-XVK238729F-25yn13iea25i
A-XVK222711F-134h5ta8yxbm0
A-XVK275016F-15wjjcbn4tpj
A-XVK275016F-15wjjcbn4tpj

之後點選Next下一步

選擇使用jar生成exe,點選Next下一步

點選Next下一步

然後點選Next下一步

之後設定so庫和dll檔案連線的設定

點選Next下一步

然後點選Next下一步

至此,已經大功告成,剩下的設定已經是我們基本不會更改的了,如語言設定什麼的,剩下的就是一路Next

讓我們來看看最終的目錄結構和執行結果吧

功能正常執行,並且成功讀取資原始檔。美中不足的是,資料夾整個184Mb的大小,jre檔案佔了150Mb,這一點暫時不知道怎麼解決,如果讀者知道請務必告訴我

相關文章