1. 程式人生 > >7.1 SWT應用程式專案的打包與發行

7.1 SWT應用程式專案的打包與發行

7專案打包與發行

當專案完成後接下來的就是打包發行了,應用程式(Application)專案和Eclipse外掛專案(plugin)的打包是不同的,本章將分別介紹兩者的打包方法,並給出實際的打包例子。

7.1應用程式專案的打包與發行

7.1.1簡介

Java應用程式專案完成後是可以脫離Eclipse執行的,要執行程式先要打它打成一個JAR包,它打包的大部份方法和標準JavaAWT/SWING的打包方法一樣,主要有以下幾個要點

lMANIFEST.MF 打包清單。它是打包的關鍵性檔案,主要是設定執行入口類和支援庫的路徑,在執行Java應用程式時是要根據此檔案中給出的資訊來查詢入口類和支援庫。

l支援包 -如果Java應用程式用到了一些Eclipse包,那麼就必須將這些包也複製到程式執行目錄,否則程式將無法執行。如swt元件支援包swt.jarjface元件支援包jface.jar。這些包都要在MANIFEST.MF檔案中設定好。

l本地化檔案 如果用到了SWT元件,則還需要將SWT的本地化檔案swt-win32-3063.dll3063是版本號)複製到程式執行目錄,否則程式將無法執行。

7.1.2打包的具體操作步驟

本節將用前幾章開發的SWT/JFace專案“myswt”的打包為例,來介紹打包應用程式專案的方法。

1、編輯清單MANIFEST.MF

1Eclipse提供了用於打包專案的“匯出”嚮導,但本例執行此嚮導之前先需要建立一個

MANIFEST.MF清單檔案,其內容如下:

Manifest-Version: 1.0

Main-Class: book.chapter_4.wizard_dialog.WizardDialog1

Class-Path: ./lib/swt.jar ./lib/jface.jar ./lib/runtime.jar

說明:

lManifest-Version 指定清單檔案的版本號

lMain-Class 指定程式執行的入口類。本例設為執行4.5.2節開發的嚮導式對話方塊。注意:類名後不要加class副檔名

lClass-Path 指定支援庫的路徑。“.”指程式執行目錄,即匯出的JAR包所在目錄。程式執行時依據

Class-Path項的設定路徑來查詢支援庫。每一個支援庫之間用空格隔開。在這裡jface.jar需要用到runtime.jar包,所以runtime.jar包也要加入到Class-Path中。

l除了入口類的包名和類名之外,其他設定項都不分大小寫,比如:Class-Path寫成class-pathCLASS-PATH也可以,swt.jar寫成SWT.JAR也行。

2)將清單檔案儲存下來,建議放在myswt專案的根目錄下。它的檔名可以任意取,本例取名為manifes.txtEclipse嚮導在打包時會自動的將manifes.txt的內容複製到JAR包的META-INF目錄下的MANIFEST.MF檔案中。

2、使用Eclipse“匯出”嚮導來打包專案

1)右鍵單擊myswt專案的專案名,在彈出選單中選擇“匯出”。在彈出的如下圖7.1所示的對話方塊中,選擇“JAR檔案”,單擊“下一步”。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

7.1匯出對話方塊

2)如下圖7.2所示,將右邊不需要的檔案都取消勾選。在“選擇匯出目標”項文字框中設定JAR包的輸出路徑和包名(可以任意取名)為“D:/myswt_application/myswt.jar”。接受其他的預設設定不變,單擊“下一步”。

附註:左邊雖然選擇了src目錄,但原始檔並不會匯出到包中,除非勾選了“匯出Java原始碼檔案和資源”項。

7.2選擇匯入檔案

3)如下圖7.3所示,接受預設設定不變,單擊“下一步”。

7.3匯出類的選項

4)這一步較關鍵。如下圖7.4所示,選擇“從工作空間中使用現有清單”項,將建立的清單檔案輸入,也可以通過旁邊的“瀏覽”按鈕來選擇清單檔案。輸入清單檔案後,單擊“完成”,Eclipse開始將專案打包。

7.4清單檔案設定

經過以上四步後,在“D:/myswt_application”路徑下生成了一個名為“myswt.jar”的檔案。myswt.jar是一個ZIP格式的壓縮檔案,可以用WinRARWinZip軟體開啟,也就是說用這兩個軟體也可以替代Eclipse嚮導來打包檔案。如果用WinRAR來打包檔案,則壓縮格式要選擇ZIP格式而非RAR格式,壓縮率倒可以任意選。

WinRAR開啟myswt.jar檔案後其內部的目錄結構如下圖7.5所示:

7.5myswt.jar檔案的內部目錄結構

myswt.jar檔案的內部目錄META-INF中僅一個檔案:MANIFEST.MF,它和以前建立的清單檔案manifest.txt的內容是一樣的,如下:

Manifest-Version: 1.0

Class-Path: ./lib/swt.jar ./lib/jface.jar ./lib/runtime.jar

Main-Class: book.chapter_4.wizard_dialog.WizardDialog1

3、複製Java應用程式的支援包及本地化檔案

MANIFEST.MF檔案中的Class-Path項設定了三個包,從Eclipseplugins目錄中將此三個支援包複製到D:/myswt_application/lib目錄,本地化檔案swt-win32-3063.dll複製到D:/myswt_application目錄中。此三個檔案在Eclipse中的路徑為:

plugins/org.eclipse.swt.win32_3.0.1/ws/win32/swt.jar

plugins/org.eclipse.jface_3.0.0/jface.jar

plugins/org.eclipse.core.runtime_3.0.1/runtime.jar

plugins/org.eclipse.swt.win32_3.0.1/os/win32/x86/swt-win32-3063.dll

複製完成後的目錄結構如下圖7.6所示:

7.6目錄結構圖

4、編寫執行myswt.jar包的批處理程式“run.bat

myswt_application目錄下建立一個批處理程式run.bat(名字任取,副檔名必須是bat),其內容僅一句語句,如下:

javaw -jar myswt.jar

說明:

ljavaw對應c:/jdk/jre/bin/javaw.exe檔案,如果windows提示命令未發現,則需要將c:/jdk/jre/bin路徑加入到windows環境變數path中。

l在執行程式的時候有一個討厭的黑色命令列視窗,要去掉它,可以將run.bat內容更改如下:“start javaw -jar myswt.jar”,start是指呼叫了windows的“執行”命令。

l如果想將swt-win32-3063.dll也放在單獨的目錄中,如“D:/myswt_application/native”目錄,則需將run.bat內容更改為:

start javaw -Djava.library.path=./native/ -jar myswt.jar

5、執行程式

雙擊run.bat檔案,得到如下圖7.7所示的程式介面。

7.7程式執行效果圖

6、注意事項

本例只需要三個支援包,但你的程式也許會需要更多的支援包才能執行。如果你想一次到位,則可以將“Java構建路徑”的“庫”選項卡中所有引用的包都複製到lib目錄中。如果你喜歡用到什麼包才加入什麼包,希望維持打包檔案的簡潔,則需要自己一步步的去試:如果缺少某支援包,執行程式時會輸出的未找到類的錯誤資訊,從資訊中的包名可得知程式缺少哪一個支援包。比如“Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jface/wizard/IWizard”,從錯誤資訊中很明顯的就能知道程式缺少jface

7.1.3其他得到JAR包的方式

要得到JAR包除了以上所說的用Eclipse“匯出”嚮導、用WinZipWinRAR,另外還能用Java自帶的命令列式打包軟體jar.exe(位於c:/jdk/bin目錄),其打包命令為:

c:/jdk/bin/jar cvfm myswt.jar C:/eclipse3.0.1/eclipse/workspace/myswt/manifest.txt -C C:/eclipse3.0.1/eclipse/workspace/myswt/bin .

說明:

lc:/jdk/bin/jar 由於本書沒有把c:/jdk/bin加入到windows環境變數path中,所以手工指定jar.exe的路徑

lcvfm jar.exe的引數,“c”建立新的jar包;“v”將除錯資訊列印在螢幕上;“f”指定生成的jar檔名;“m”使用清單檔案。注意它們都是小寫

lmyswt.jar 打包後的JAR包名

l在前面是把清單檔案manifest.txt放在C:/eclipse3.0.1/eclipse/workspace/myswt/目錄下。如果將它和批處理檔案放在一個目錄就不必指定長長的路徑了。

l-C 路徑 . ”指將路徑下(包括子目錄)的所有檔案打包,由於class檔案是輸出在專案的bin目錄下,所以路徑指定到專案的bin目錄,注意三者之間是用空格隔開,並且最後一個字元是小數點。

這種方式的優點是沒有Eclipse匯出嚮導的操作那麼麻煩,適合經常需要匯出JAR包的情況。

7.1.4使用第三方外掛對專案打包

開源組織(http://sourceforge.net/)中有一款可將Eclipse支援包和專案編譯檔案一起打到一個包中的外掛,叫“Fat Jar”,它的下載地址是“http://fjep.sourceforge.net/”,具體下載不再說明,安裝步驟參閱第1SWT Designer的安裝。

Fat Jar的使用步驟如下:

1)右鍵單擊myswt專案的專案名,可見選單中多了一項“Build Fat Jar”,如下圖7.8所示,選擇“Build Fat Jar”項。

7.8右鍵選單

2)在下圖7.9所示的對話方塊中,“Jar-Name”項填入JAR包的輸出路徑。檔案清單“Manifest”項不用填,預設會自動建立一個。“Main-Class”項填入程式的入口類。其他都接受預設值,單擊“下一步”。

7.9輸出配置

3)如下圖7.10所示,視窗中將myswt專案所用到的支援包都列了出來。我們僅勾選圖中runtime.jarswt.jarjface.jar這三項即可,當然全選也並嘗不可,只是最後得到的JAR包會更大一些,因為Fat Jar會將所有支援包合併在一個JAR包中。

7.10選擇要打包的檔案

單擊圖7.10的“完成”按鈕後, JARmyswt.jar將輸出到D:/myswt_applicationh目錄中。和以前一樣,要執行此JAR包需要一個批處理檔案以及本地化檔案swt-win32-3063.dll,唯一不同的是不再需要Eclipse支援包,其目錄結構如下圖7.11所示:

7.11目錄結構

為什麼不需要Eclipse支援包了呢?那是因為支援包已經在myswt.jar檔案中了,從下圖7.12可以看到swt.jar等都被拆散成目錄,幷包含在myswt.jar包中。

7.12myswt.jar的內部目錄結構

其中META-INF目錄的MANIFEST.MF檔案內容如下,可以發現和以前不同的地方是:Class-Path項沒有了。

Manifest-Version: 1.0

Created-By: Fat Jar Eclipse Plug-In

Main-Class: book.chapter_4.wizard_dialog.WizardDialog1

7.1.4讓使用者電腦不必安裝JRE環境

通常執行Java程式有個前提條件:使用者電腦必須先安裝JRE環境。雖然安裝JRE環境非常簡單,但畢竟多了一步,算是有一點點的瑕疵。這裡給出一個不必讓使用者安裝JRE環境的方法,其實現步驟如下:

1)將原JDK中的“jre”目錄複製到“D:/myswt_application/java1.4.2”目錄下(java1.4.2也可換成其他名稱)。

2)將JDKJRE從本機解除安裝掉,這樣表示本機沒有安裝JAVA執行環境。

3)修改批處理檔案run.bat中的命令為“start java1.4.2/jre/bin/javaw -jar myswt.jar”,僅僅是在javaw前加上了一個相對應路徑。

雙擊run.bat即可在不安裝JRE環境的電腦執行此Java應用程式。

7.1.5更進一步的完善

1、拋棄批處理檔案(*.bat

用批處理檔案執行程式似乎不夠專業,雖然它足以完成執行任務。但習慣就象一種毒藥一旦染上就很難擺脫它的影響,Windows統治下的人們早已經習慣執行副檔名是EXE的程式,用*.bat他們就會感覺彆扭。

我們可以用一個叫JavaLauncher的免費小程式來代替批處理檔案去執行Java程式。JavaLauncher的下載網址是:

下載下來的檔案是一個名JavaLauncher.zip的壓縮包,解壓後的目錄結構如下圖7.13所示:

7.13JavaLauncher.zip目錄結構

在上圖的目錄中

lsource目錄包含了JavaLauncher的源程式,是用C語言寫的

lchanges.txt是新版的修改說明

llaunch.exe是主程式

llauncher.cfg是配置檔案

lreadme.txt是一些說明和示例

我們只需要launch.exelauncher.cfg兩個檔案,將這兩個檔案複製到打包檔案所在的目錄。launcher.cfg是一個僅三行內容的文字檔案,將它修改如下:

.

./java1.4.2/jre/bin/javaw.exe

-jar myswt.jar

l第一行設定指向JARmyswt.jar的目錄,由於launch.exemyswt.jar同在一個目錄,所以用“.”即當前目錄。

l第二行設定指向jre/bin/javaw.exe的路徑。在上一小節(7.1.4節)已將jre目錄複製到了java1.4.2子目錄中

配置好launcher.cfg後,雙擊launch.exe即可執行java應用程式。

如果仔佃研究eclipse的啟動方式,發現eclipseJavaLauncher的原理一樣:eclipse.exe相當於launch.exestartup.jar相當於myswt.jar。只不過eclipse.exe不象launch.exe要具有通用性,所以它沒有*.cfg這樣的配置檔案,而是將啟動資訊固化在eclipse.exe中。

2、美化圖示

launch.exe檔案的圖示太單調了,讓我們給它換個好看點的。換程式的圖示需要用到一個免費的軟體:Resource Hacker,它有中文版,下載網址是:

Resource Hacker來替換launch.exe的圖示的步驟如下:

1)執行Resource Hacker,得到如下圖7.14所示的視窗。

7.14Resource Hacker的主介面

2)單擊主選單“檔案→開啟”,將launch.exe載入到程式中,結果如下圖7.15所示。

7.15載入Lanunch.exe之後的介面

3)如上圖,選擇左邊的“圖示→11030”,然後右鍵單擊“1030”項,選擇“替換資源…”。如下圖7.16所示,在彈出視窗中單擊“開啟新圖示檔案”,選擇一個滿意的圖示,然後單擊“替換”按鈕。

附註:圖示檔案可以是exedllresico,該軟體可以從exedllres抽取出圖示,本例選擇的是java的一個圖示檔案JavaCup.ico

7.16選擇圖示檔案

4)如下圖7.17所示,選擇“檔案→另存為”,取名myswt.exe

附註:按理說選擇“儲存”也是可以的,這時Resource Hacker會將老的launch.exe備份成launch_original.exe。但也許是重新整理上有問題,用“儲存”方式有時launch.exe無法顯示出新圖示,但有時又可以。

7.17儲存修改

5)最後的目錄如下圖7.18所示,可見myswt.exe(也就是launch.exe改了個名稱)的圖示換成了Java的圖示。雙擊myswt.exe即可執行Java應用程式。

7.18最後的效果

3、最後的打包

傳送給使用者之前,通常要用WinZipWinRAR將所有的檔案全部打成一個壓縮包,然後使用者得到這個壓縮包後,將其解壓縮後即可執行程式,Eclipse軟體就是這種方式。

另一種方式是用InstallShieldInstallAnyWhere這樣的安裝程式製作軟體來建立一個單一的setup.exe檔案,它具有嚮導式的安裝介面,而且還可以往windows的程式欄插入選單項,關於這些安裝程式製作軟體的具體使用請參閱相關書籍。

相關推薦

7.1 SWT應用程式專案打包發行

第7章專案打包與發行 當專案完成後接下來的就是打包發行了,應用程式(Application)專案和Eclipse外掛專案(plugin)的打包是不同的,本章將分別介紹兩者的打包方法,並給出實際的打包例子。 7.1應用程式專案的打包與發行 7.1.1簡介 Java應用程式專案完成後是可以脫離Eclipse執行

大資料篇:Spark-shell的測試及Scala獨立應用程式的編寫sbt打包

一、在 Spark Shell 中執行程式碼 Spark shell 提供了簡單的方式來學習 API,並且提供了互動的方式來分析資料。你可以輸入一條語句,Spark shell會立即執行語句並返回結果,這就是我們所說的REPL(Read-Eval-Print Loop,互動式直譯器

3.7.1字典應用--三級菜單

elif 應用 input 菜單 優化 == strong odin isn 字典應用:三級菜單 方法一: # -*-coding:utf-8 -*- __date__ = ‘2018/2/5 14:54‘ __author__ = ‘xiaojiaxin‘ __file_

5.1 Win32應用程式:EXE

  Nico Bendlin的MiniDExe很好地演示了不使用任何Delphi例程來實現一個Win32應用程式的方法。對於一個可執行程式.EXE來說,只須滿足如下條件,就可以在被Windows系統中執行:  是一個以.EXE方式生成的格式正確的PE(Portable Executable)檔案有一個正確的入

獨立部署asp.net core 2.1 Web應用程式

1.建立asp.net core 2.0  Web應用程式 新增引用: Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.Design 2.配置Sqlite資料庫 修改Startup.cs檔案

Android應用程式簽名打包(AS)

使用Android studio對Android應用簽名步驟: 第一步: 第二步: 第三步: 第四步: 數字證書建立完成後,點選OK----->點選Next------>Finish。 注意:生成後的數字證書千萬不能丟失,還有密碼也不能忘記了

應用程式測試方法技巧

今天解決專案問題時,忽然發現做了很多年測試,經常清理快取臨時檔案,刪除修改配置檔案,有時確忽略了這些對測試的影響和作用。 最近困擾較多的是office外掛測試,外掛安裝挑環境,相容性不夠好,導致我們通過頻繁重灌作業系統和重灌office軟體來驗證外掛是否可以正常啟動和載入。 起初自己通過事件管理器來獲取錯

win32應用程式,TCHARCHAR的相互轉換

TCHR 與 CHAR相互轉換 含義 TChar to Char CHAR To TCHAR 含義 TCHAR:在Unicode編碼下,為寬字元wchar;在Ansi編碼下,為字元char。 CHAR:是在Ansi編碼下字串格式。

7.1 虛擬機器直接IO原理架構

第5與第6章分別講解了qemu/kvm的硬體輔助IO模擬虛擬化與virtio半虛擬化. 模擬I/O裝置方式的優點是對硬體平臺依賴性較低、可以方便模擬一些流行的和較老久的裝置、不需要宿主機和客戶機的額外支援,故相容性高;而其缺點是I/O路徑較長、VM-Exit次

Android應用程式簽名打包,混淆程式碼時報錯的處理方法

看了很多關於如何解決android應用程式打包出錯的帖子,試用之後,發現並不能完全解決我所遇到的問題。糾結了幾天,終於解決了我所遇到的問題,現將處理方法寫出來以備自己日後查閱,也為遇到相同問題的朋友提供一點思路。 在我的程式中使用到了ksoap2.jar,關於這個Jar包

NetBeans Java程式專案打包 命令列執行

將NetBeans中的Java專案打包 並用命令列執行 一、專案打包為jar包 1、Java專案      寫了一個簡單的程式      2、 專案構建       

[轉載] 使用 Java Web Start 部署 SWT 應用程式

SWT 概述現在把標準視窗小部件工具箱(SWT)引入開發社群是最恰當不過了。雖然到目前為止,Sun 的 Java 基礎類(Java Foundation Classes,JFC)一直能讓客戶機端應用程式的開發人員感到滿意,但仍然有許多開發人員出於各種原因不願使用 SWT。對於

Asp.Net底層解析(四)——應用程式生命週期HttpModule

    前言:一般ASP.NET開發者對頁面生命週期(PageLife Cycle)是比較熟悉的,在開發ASP.NET應用程式中經常需要從頁面週期的角度去思考問題。實際上在頁面生命週期的背後,還存在著一個不太為人所熟知的更廣義的週期——應用程式生命週期(Applicatio

VS2015[Web應用程式專案***已配置為使用IIS。無法訪問IIS元資料庫]

解決過程: (1)      以管理員許可權啟動VS2012,載入專案。這時候又彈出瞭如下提示:“Web應用程式專案***已配置為使用IIS。未能找到Web伺服器”……。 (2)      在專案上點選右鍵,選擇編輯。開啟專案檔案,在專案檔案中查詢<UserII

Web應用程式專案以配置使用IIS。未找到Web伺服器

針對這個問題,本人也從網上找了一下解決辦法,但是不是太全面,接下來我會總結一下我所用到過的方法。 1、在資料夾下面編輯該Web專案的csproj檔案,把UserIIS改為False。 2、可以在IIS

ASP.NET Core 中文文件 第三章 原理(1應用程式啟動

ASP.NET Core 為你的應用程式提供了處理每個請求的完整控制。Startup 類是應用程式的入口(entry point),這個類可以設定配置(configuration)並且將應用程式將要使用的服務連線起來。開發人員可以在 Startup 類中配置請求管道,該管道將用於處理應用程式的所有請求。 章

如何用VS2010新建一個Win32控制檯應用程式專案

1啟動Visual Studio 2010開發環境,從“開始”選單選擇“檔案”|“新建”|“專案”,彈出New Project對話方塊如圖1-1所示。 圖1-1 2展開“Visual C++”樹狀結點單擊Win32,選擇Win32控制檯應用程式,在名稱處輸入專案名稱Lab

Java筆記---Hadoop 2.7.1下WordCount程式詳解

一、前言 在之前我們已經在 CenOS6.5 下搭建好了 Hadoop2.x 的開發環境。既然環境已經搭建好了,那麼現在我們就應該來乾點正事嘛!比如來一個Hadoop世界的HelloWorld,也就是WordCount程式(一個簡單的單詞計數程式) 二、

再探MFC(一)基於對話方塊的MFC應用程式專案框架

大學畢設時學的MFC,工作頭一年還用的MFC,之後再也用不到了.當時買的MFC書籍早就束之高閣了.現在需要開發一個簡單的桌面程式,於是我又把MFC撿起來.MFC早已過時,不過如果開發簡單的Windows桌面應用,MFC不失為一個簡單的選擇.再撿起MFC,充滿了對大學和逝去的

Web應用程式專案XXX已配置為使用IIS

用VS010匯入了一個解決方案專案後,有個別項目程式碼無法載入,顯示為不可用,並且報錯,如下圖: 解決方法:找到你的專案的工程檔案,字尾名為csproj檔案,然後搜尋找到<UseIIS