熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

怎樣制作可執行的java程序

2013-11-13 16:22:31  來源: Oracle 

  常常在網上看到有人詢問如何把java程序編譯成exe文件通常回答只有兩種一種是制作一個可執行的JAR文件包然後就可以像chm文檔一樣雙擊運行了而另一種是使用JET來進行
  編譯但是JET是要用錢買的而且據說JET也不是能把所有的Java程序都編譯成執行文件性能也要打些折扣所以使用制作可執行JAR文件包的方法就是最佳選擇了何況它還能保持Java的跨平台特性
  
  下面就來看看什麼是JAR文件包吧
  
  JAR文件包
  JAR文件就是JavaArchiveFile顧名思意它的應用是與Java息息相關的是Java的一種文檔格式JAR文件非常類似ZIP文件准確的說它就是ZIP文件所以叫它文件包JAR文件與ZIP文件唯一的區別就是在JAR文件的內容中包含了一個METAINF/MANIFESTMF文件這個文件是在生成JAR文件的時候自動創建的舉個例子如果我們具有如下目錄結構的一些文件
  
  ==
  
  `test
  
  `Testclass
  
  把它壓縮成ZIP文件testzip則這個ZIP文件的內部目錄結構為
  
  testzip
  
  `test
  
  `Testclass
  
  如果我們使用JDK的jar命令把它打成JAR文件包testjar則這個JAR文件的內部目錄結構為
  
  testjar
  
  |METAINF
  
  | `MANIFESTMF
  
  `test
  
  `Testclass
  
  創建可執行的JAR文件包
  制作一個可執行的JAR文件包來發布你的程序是JAR文件包最典型的用法
  
  Java程序是由若干個class文件組成的這些class文件必須根據它們所屬的包不同而分級分目錄存放運行前需要把所有用到的包的根目錄指定給CLASSPATH環境變量或者java命令的cp參數運行時還要到控制台下去使用java命令來運行如果需要直接雙擊運行必須寫Windows的批處理文件(bat)或者Linux的Shell程序因此許多人說Java是一種方便開發者苦了用戶的程序設計語言
  
  其實不然如果開發者能夠制作一個可執行的JAR文件包交給用戶那麼用戶使用起來就方便了在Windows下安裝JRE(JavaRuntimeEnvironment)的時候安裝文件會將jar文件映射給javawexe打開那麼對於一個可執行的JAR文件包用戶只需要雙擊它就可以運行程序了和閱讀chm文檔一樣方便(chm文檔默認是由hhexe打開的)那麼現在的關鍵就是如何來創建這個可執行的JAR文件包
  
  創建可執行的JAR文件包需要使用帶cvfm參數的jar命令同樣以上述test目錄為例命令如下
  
  jarcvfmtestjarmanifestmftest
  
  這裡testjar和manifestmf兩個文件分別是對應的參數f和m其重頭戲在manifestmf因為要創建可執行的JAR文件包光靠指定一個manifestmf文件是不夠的因為MANIFEST是JAR文件包的特征可執行的JAR文件包和不可執行的JAR文件包都包含MANIFEST關鍵在於可執行JAR文件包的MANIFEST其內容包含了MainClass一項這在MANIFEST中書寫格式如下
  
  MainClass:可執行主類全名(包含包名)
  
  例如假設上例中的Testclass是屬於test包的而且是可執行的類(定義了publicstaticvoidmain(String[])方法)那麼這個manifestmf可以編輯如下
  
  MainClass:testTest<回車>
  
  這個manifestmf可以放在任何位置也可以是其它的文件名只需要有MainClass:testTest一行且該行以一個回車符結束即可創建了manifestmf文件之後我們的目錄結構變為
  
  ==
  
  test
  
  Testclass
  
  manifestmf
  
  這時候需要到test目錄的上級目錄中去使用jar命令來創建JAR文件包也就是在目錄樹中使用==表示的那個目錄中使用如下命令
  
  jarcvfmtestjarmanifestmftest
  
  之後在==目錄中創建了testjar這個testjar就是執行的JAR文件包運行時只需要使用javajartestjar命令即可
  
  需要注意的是創建的JAR文件包中需要包含完整的與Java程序的包結構對應的目錄結構就像上例一樣而MainClass指定的類也必須是完整的包含包路徑的類名如上例的testTest而且在沒有打成JAR文件包之前可以使用java<類名>來運行這個類即在上例中javatestTest是可以正確運行的(當然要在CLASSPATH正確的情況下)
  
  jar命令詳解
  jar是隨JDK安裝的在JDK安裝目錄下的bin目錄中Windows下文件名為jarexeLinux下文件名為jar它的運行需要用到JDK安裝目錄下lib目錄中的toolsjar文件不過我們除了安裝JDK什麼也不需要做因為SUN已經幫我們做好了我們甚至不需要將toolsjar放到CLASSPATH中
  
  使用不帶任何的jar命令我們可以看到jar命令的用法如下
  
  jar{ctxu}[vfmM][jar文件][manifest文件][C目錄]文件名
  
  其中{ctxu}是jar命令的子命令每次jar命令只能包含ctxu中的一個它們分別表示
  
  c 創建新的JAR文件包
  
  t 列出JAR文件包的內容列表
  
  x 展開JAR文件包的指定文件或者所有文件
  
  u 更新已存在的JAR文件包(添加文件到JAR文件包中)
  
  [vfmM]中的選項可以任選也可以不選它們是jar命令的選項參數
  
  v 生成詳細報告並打印到標准輸出
  
  f 指定JAR文件名通常這個參數是必須的
  
  m 指定需要包含的MANIFEST清單文件
  
   只存儲不壓縮這樣產生的JAR文件包會比不用該參數產生的體積大但速度更快
  
  M 不產生所有項的清單(MANIFEST〕文件此參數會忽略m參數
  
  [jar文件]即需要生成查看更新或者解開的JAR文件包它是f參數的附屬參數
  
  [manifest文件]即MANIFEST清單文件它是m參數的附屬參數
  
  [C目錄]表示轉到指定目錄下去執行這個jar命令的操作它相當於先使用cd命令轉該目錄下再執行不帶C參數的jar命令它只能在創建和更新JAR文件包的時候可用
  
  文件名指定一個文件/目錄列表這些文件/目錄就是要添加到JAR文件包中的文件/目錄如果指定了目錄那麼jar命令打包的時候會自動把該目錄中的所有文件和子目錄打入包中
  
  下面舉一些例子來說明jar命令的用法
  
  )jarcftestjartest
  
  該命令沒有執行過程的顯示執行結果是在當前目錄生成了testjar文件如果當前目錄已經存在testjar那麼該文件將被覆蓋
  
  )jarcvftestjartest
  
  該命令與上例中的結果相同但是由於v參數的作用顯示出了打包過程如下
  
  標明清單(manifest)
  
  增加test/(讀入=)(寫出=)(存儲了%)
  
  增加test/Testclass(讀入=)(寫出=)(壓縮了%)
  
  )jarcvfMtestjartest
  
  該命令與)結果類似但在生成的testjar中沒有包含METAINF/MANIFEST文件打包過程的信息也略有差別
  
  增加test/(讀入=)(寫出=)(存儲了%)
  
  增加test/Testclass(讀入=)(寫出=)(壓縮了%)
  
  )jarcvfmtestjarmanifestmftest
  
  運行結果與)相似顯示信息也相同只是生成JAR包中的METAINF/MANIFEST內容不同是包含了manifestmf的內容
  
  )jartftestjar
  
  在testjar已經存在的情況下可以查看testjar中的內容如對於)和)生成的testjar分別應該此命令結果如下
  
  對於)
  
  METAINF/
  
  METAINF/MANIFESTMF
  
  test/
  
  test/Testclass
  
  對於)
  
  test/
  
  test/Testclass
  
  )jartvftestjar
  
  除顯示)中顯示的內容外還包括包內文件的詳細信息
  
  WedJun::GMTMETAINF/
  
  WedJun::GMTMETAINF/MANIFESTMF
  
  WedJun::GMTtest/
  
  WedJun::GMTtest/Testclass
  
  )jarxftestjar
  
  解開testjar到當前目錄不顯示任何信息對於)生成的testjar解開後的目錄結構如下
  
  ==
  
  |METAINF
  
  | `MANIFEST
  
  `test
  
  `Testclass
  
  )jarxvftestjar
  
  運行結果與)相同對於解壓過程有詳細信息顯示
  
  創建METAINF/
  
  展開METAINF/MANIFESTMF
  
  創建test/
  
  展開test/Testclass
  
  )jaruftestjarmanifestmf
  
  在testjar中添加了文件manifestmf此使用jartf來查看testjar可以發現testjar中比原來多了一個manifest這裡順便提一下如果使用m參數並指定manifestmf文件那麼manifestmf是作為清單文件MANIFEST來使用的它的內容會被添加到MANIFEST中但是如果作為一般文件添加到JAR文件包中它跟一般文件無異
  
  )jaruvftestjarmanifestmf
  
  與)結果相同同時有詳細信息顯示
  
  增加manifestmf(讀入=)(寫出=)(壓縮了%)
  
  關於JAR文件包的一些技巧
  )使用unzip來
From:http://tw.wingwit.com/Article/program/Oracle/201311/18223.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.