『壹』 java怎樣保存打開就可執行的文件
會生成.
class文件,只能用反編譯軟體看,在你的eclipse工作空間,一般是workspace下的工程中,路徑時你自己指定的.
編譯輸出路徑的默認位置,普通工程:bin,web工程:WEB-INF/classes,maven工程:target/classes.
『貳』 求Java程序打包成可執行jar的工具或者方法
總體思路是先打成jar再把jar打成exe。主要看1.3和2.3里的內容就可以了。
1.將項目打成jar:
1.1要將項目打包成jar文件,方法很多,可以用Eclipse自帶的打包工具Ant打包,也可以用Eclipse的Export生成jar。經過嘗試後,我不推薦用Ant打包,因為要自己編寫xml腳本語言,還要增加一些外部的jar,所以我打了好幾次都沒打成。
1.2在這里介紹兩種方法生成jar,第一種是用Eclpise的Export功能。在要打包的項目上擊右鍵,選擇Export,在窗口中選擇Java里的JAR file。Next後的窗口中已經自動選好了要打包的項目,用戶可以點擊加號查看項目里被打包的內容。在下面的JAR file里設置你打包生成jar文件的輸出目錄,下一步在出現的窗口中選擇Use existing manifest from workspace,在下面的Main class後面直接點Browse,它會自動列出你項目中有主函數main的類。選擇主類後點Finish即可生成jar文件。在此說明一下,這種打包方法不能把項目中的外部的jar包打進來,因該是也要編寫一些腳本語言,沒往深研究。所以生成後的jar有些是不能執行的。
1.3第二種方法是利用Eclipse的一個第三方插件fatjar生成jar文件,也是本人覺得最簡單最方便的一種生成方式。先從網上下載些插件,解壓後是一個plugins的文件夾,裡面只有一個文件夾,我的「net.sf.fjep.fatjar_0.0.24」將它到Eclipser plugins文件夾下,此插件就安裝成功了,重啟Eclipse在項目上右擊就會看到多出一個「Build Fat Jar」在前面有個綠色的「+」號,這時你就可以用此插件打包你的項目了。進去後第一個界面Jar-Name里增入要生成的jar文件名,我的是「CAMP_fat.jar」。在Main-Class後點Browse像Export一樣它也會列出你項目中的主類,選擇後其它默認即可,Next後會列出你要打包的所有內容,這個插件的優勢就是可以將你項目中的外部jar也打進來,有三個先項,其中Export ANT是生成build.xml腳本文件,方便用戶以後修改腳本,其它兩個按鈕沒用。在這里什麼都不點,直接點Finish就可以生成jar文件。
2.將jar打成.exe文件:
2.1 雖然此時的jar文件已經可以執行了。生成.exe的文件我也是用兩種方法實現的,用到的打包工具是j2ewiz和exe4j,它們的不同會在我下面的介紹中體現出來。
2.2 首先是j2ewiz,這個軟體是綠色的,不用安裝,解壓後可以直接運行,但這個軟體生成的 .exe文件不是跨平台的。運行此程序首先就是輸入要打包的jar文件,我們瀏覽JAR選擇我們之前用fatjar生成的「CAMP_fat.jar」項目文件(詳見1.3),下面那個選項是提示用戶最低要求的JRE版本,一般選1.3。下一步,因為我們的寢室管理系統是圖形界面,所以在這里選「Windows窗口程序」下一步它也是自動生成要執行的主類,你只要選擇就可以。下面的選框可以選擇你啟動程序顯示的圖片。下一步後這個窗可按個人喜好選擇。下一步,如果你的程序還有什麼依賴的外部jar文件,可以從這里加上,但因為之前的fatjar以經將我們項目所用的那三個連資料庫的外部類打進CAMP_fat.jar包里了,所以這里不用再添加。如果你之前是用Export打的jar包,那麼這里就需要再把那個三個資料庫的包加進來了(詳見1.2)。下一步是添入要生成的.exe文件名,再選一個程序圖標就可以了,下一步後生成.exe文件,點完成。雙擊生成的.exe文件就能看到運行效果了,這種exe文件還沒有脫離JDK環境,還不能跨平台使用,只能用於小組成員測試使用。
2.3 =下面進入最關鍵的,如何打包跨平台的.exe文件。用到的軟體是exe4j,我用的是V4.0版的,此軟體需要破解。安裝後運行左窗窗口標有十步,其實打包過程也非常簡單。第一步完全略過,直接點Next第二步我們選擇「JAR
in EXE mode」 就是選擇我們已經有製作好的jar文件。第3步上面是項目名稱,可隨便填寫,下面一個寫出你想要將打包後的exe文件輸出的目錄我的是「桌面\project\」。第4步,由於我的演示程序是圖形的,所以選第一個,如果你的程序是控制台的,則選擇第二個,Executable name寫你將要生成的.exe文件的名字,Icon File可以選擇生成文件的圖標。第5步,先別管上面的,先在下面單擊綠色的「+」號,在彈出的窗口中點Archive,然後找到起初已經做好的CAMP_fat.jar(詳見1.3)文件,"OK"後返回,在下面的Class Path里就出現jar文件路徑後,再在上面Main Class欄內點擊找到main所在的類。第6步,你系統的JRE版本,一般是填個1.3,下面填1.6在這里單擊advanced options,選擇search sequence。選這個就是因為我們要把JDK環境也打包進來,好讓程序能跨平台使用。首先要從你系統的JDK下的JRE目錄到你.exe文件的輸出目錄下「桌面\project\JRE」,然後回到exe4j中在彈出窗口刪除列表中的所有項。我的是三項,一個注冊表的,一個JAVA環境變數的,一個JDK環境變數的,都不要。然後單擊綠「+」,選擇directory並選擇JRE的根目錄,我的是「桌面\project\JRE」就是後的目錄,選完後exe4j彈出窗口中的Directory里會顯示「.\JRE」。點OK關閉該窗口,返回exe4j的主窗口,你就可以看到剛加的路徑。再從主窗口左側窗口中單擊advanced options,並選擇preferred VM,在彈出的窗口中選擇client hostspot VM,單擊next按鈕繼續。7、8步是一些個性設置默認即可。第9步編譯完後第10步你點那個「Click Here to Start the Application」按鈕就可以看到程序運行效果了,然後再點」Seave as」保存一個exe4j生成的一個文件,隨便存哪裡都行,和我們的.exe程序無關。全部製作過程就完工了。
『叄』 java exe 怎麼更新jar包
jar 應用 先打開命令提示符(win2000或在運行筐里執行cmd命令,win98為DOS提示符),輸入jar -help,然後回車(如果你盤上已經有了jdk1.1或以上版本),看到什麼:
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
選項:
-c 創建新的存檔
-t 列出存檔內容的列表
-x 展開存檔中的命名的(或所有的〕文件
-u 更新已存在的存檔
-v 生成詳細輸出到標准輸出上
-f 指定存檔文件名
-m 包含來自標明文件的標明信息
-0 只存儲方式;未用ZIP壓縮格式
-M 不產生所有項的清單(manifest〕文件
-i 為指定的jar文件產生索引信息
-C 改變到指定的目錄,並且包含下列文件:
如果一個文件名是一個目錄,它將被遞歸處理。
清單(manifest〕文件名和存檔文件名都需要被指定,按'm' 和 'f'標志指定的相同順序.
示例1:將兩個class文件存檔到一個名為 'classes.jar' 的存檔文件中:
jar cvf classes.jar Foo.class Bar.class
示例2:用一個存在的清單(manifest)文件 'mymanifest' 將 foo/ 目錄下的所有文件存檔到一個名為 'classes.jar' 的存檔文件中:
jar cvfm classes.jar mymanifest -C foo/ .
來個小例子試試看:
我們只有一個HelloWorld,如下:
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hi, Hello World!");
}
}
我將這個java文件存到C盤跟目錄下,ok,接下來,
在先前打開的命令提示符下(跳轉到C盤提示符下),我們輸入javac HelloWorld.java,然後繼續輸入:jar cvf hello.jar HelloWorld.class,回車後去你的C盤看看,多了什麼,沒錯 hello.jar 。
基本的步驟我們現在都知道了,你可以自己去嘗試一下隨著jar後面的參數的不同,結果有什麼變化。
緊接著我們看看如何運行我們的jar包。
在進入正題之前,你要先打開我們剛剛做好的jar包看看,多了什麼呢,META-INF目錄?再看看裡面是什麼,還有一個MANIFEST.MF文件是不是?用文本編輯器(我這里是UltraEdit)打開它看看:
Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)
就是這樣。這里我們對它進行修改,加一句:Main-Class: HelloWorld (在第三行)。這個就是我們之前寫的那個類,也就是我們的入口類。也即,
Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)
Main-Class: HelloWorld
接下來,我們在命令提示符里執行:
jar umf MANIFEST.MF app.jar
這樣我們使用了我們自己的MANIFEST.MF文件對原來默認的進行了更新。你不妨可以再進去看看是不是添上了Main-Class: HelloWorld這一句。
Ok,這個最後的一步了,來驗證我們做的一切,在命令提示符中輸入:
java -jar hello.jar(執行)
出現了什麼,――Hi, Hello World!
我們再來看看jar文件在tomcat中發布,注意:在tomcat中我們就不能再用jar這種格式,而改war格式,它是專門用於web應用的,其實整個過程下來基本上和jar是類似的:
先准備我們要打包的資源。
找到存放tomcat的webapps目錄,進到其中,新建一個文件夾,這里命名為hello,再進去新建WEB-INF文件夾,再進去新建 classes文件夾,此時我們也將我們唯一的servlet,HelloWorld.java放到這里,在與classes目錄同級下建立一文件 web.xml。Ok,目前我們初步建立了一個簡單的web應用。
在命令提示符下進到先前創制的hello目錄下,執行 jar cvf hello.war * ,我們便得到hello.war。將它拷貝至webapps目錄下,ok,來看最後一步,打開tomcat的目錄conf中的server.xml,加入:
reloadable="true"/>
大功告成!運行它,啟動tomcat,後在瀏覽器中輸入http://localhost:8080/hello/HelloWorld,有了嗎?
############
jar基本操作:
############
1. 創建jar文件
jar cf jar-file input-file(s)
c---want to Create a JAR file.
f---want the output to go to a file rather than to stdout.
eg: 1)jar cf myjar.jar query_maintain_insert.htm
2)jar cvf myjar.jar query_maintain_insert.htm
v---Proces verbose(詳細的) output.
3)jar cvf myjar.jar query_maintain_insert.htm mydirectory
4)jar cv0f myjar.jar query_maintain_insert.htm mydirectory
0---don't want the JAR file to be compressed.
5)jar cmf MANIFEST.MF myjar.jar yahh.txt
m---Used to include manifest information from an existing manifest file.
6)jar cMf MANIFEST.MF myjar.jar yahh.txt
M---the default manifest file should not be proced.
7)jar cvf myjar.jar *
*---create all contents in current directory.
2. 察看jar文件
jar tf jar-file
t---want to view the Table of contents of the JAR file.
eg: 1)jar vft yahh.jar
v---Proces verbose(詳細的) output.
3. 提取jar文件
jar xf jar-file [archived-file(s)]
x---want to extract files from the JAR archive.
eg: 1)jar xf yahh.jar yahh.txt(僅提取文件yahh.txt)
2)jar xf yahh.jar alex/yahhalex.txt(僅提取目錄alex下的文件yahhalex.txt)
3)jar xf yahh.jar(提取該jar包中的所有文件或目錄)
4. 修改Manifest文件
jar cmf manifest-addition jar-file input-file(s)
m---Used to include manifest information from an existing manifest file.
5. 更新jar文件
jar uf jar-file input-file(s)
u---want to update an existing JAR file.
-->生成exe:<--
第一種:在jbuilder中:
首先你要保證Run菜單-->Run Project能順利運行
然後Wizards菜單-->Native Executable Builder
選中Compress the contents of the archive(產生jar文件的話)
Next-->Next-->選中Always include all classes and resources再Next-->Next-->Next
選中Windows GUI"exe"(產生EXE文件的話)-->Finish
再在項目的文件列表中的Native Executable右擊-->Make就可以了
第二種:在cmd 下生成jar文件
abc.txt內容如下:
Manifest-Version: 1.0
Main-Class: main-class-name(回車)
在cmd下:
javac *.java
jar cvfm abc.jar abc.txt *.class
『肆』 java包下的META-INF文件夾下的MANIFEST.MF文件有神馬作用 android客戶端
META-INF文件夾中的MANIFEST.MF 的作用:
這個文件夾裡面有文件:MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 14.0-b16 (Sun Microsystems Inc.)
Main-Class: com.hadeslee.yoyoplayer.player.ui.Main
Class-Path: lib/commons-codec-1.3.jar lib/commons-httpclient-3.1.jar l
ib/commons-logging-1.1.jar lib/commons-logging-api.jar lib/examples.j
ar lib/jflac-1.2.jar lib/jl1.0.jar lib/jmactritonusspi1.74.jar lib/jn
a.jar lib/jogg-0.0.7.jar lib/jorbis-0.0.15.jar lib/jspeex0.9.7.jar li
b/junit-4.4.jar lib/kj_dsp1.1.jar lib/mp3spi1.9.4.jar lib/tritonus_sh
are.jar lib/vorbisspi1.0.2.jar
X-COMMENT: Main-Class will be added automatically by build
我們把MANIFEST中的配置信息進行分類,可以歸納出下面幾個大類:
一. 一般屬性
1. Manifest-Version
用來定義manifest文件的版本,例如:Manifest-Version: 1.0
2. Created-By
聲明該文件的生成者,一般該屬性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1
3. Signature-Version
定義jar文件的簽名版本
4. Class-Path
應用程序或者類裝載器使用該值來構建內部的類搜索路徑
二. 應用程序相關屬性
1. Main-Class
定義jar文件的入口類,該類必須是一個可執行的類,一旦定義了該屬性即可通過 java -jar x.jar來運行該jar文件。
三. 小程序(Applet)相關屬性
1. Extendsion-List
該屬性指定了小程序需要的擴展信息列表,列表中的每個名字對應以下的屬性
2. <extension>-Extension-Name
3. <extension>-Specification-Version
4. <extension>-Implementation-Version
5. <extension>-Implementation-Vendor-Id
5. <extension>-Implementation-URL
四. 擴展標識屬性
1. Extension-Name
該屬性定義了jar文件的標識,例如Extension-Name: Struts Framework
五. 包擴展屬性
1. Implementation-Title 定義了擴展實現的標題
2. Implementation-Version 定義擴展實現的版本
3. Implementation-Vendor 定義擴展實現的組織
4. Implementation-Vendor-Id 定義擴展實現的組織的標識
5. Implementation-URL : 定義該擴展包的下載地址(URL)
6. Specification-Title 定義擴展規范的標題
7. Specification-Version 定義擴展規范的版本
8. Specification-Vendor 聲明了維護該規范的組織
9. Sealed 定義jar文件是否封存,值可以是true或者false (這點我還不是很理解)
六. 簽名相關屬性
簽名方面的屬性我們可以來參照JavaMail所提供的mail.jar中的一段
Name: javax/mail/Address.class
Digest-Algorithms: SHA MD5
SHA-Digest: AjR7RqnN//cdYGouxbd06mSVfI4=
MD5-Digest: ZnTIQ2aQAtSNIOWXI1pQpw==
這段內容定義類簽名的類名、計算摘要的演算法名以及對應的摘要內容(使用BASE64方法進行編碼)
android客戶端伺服器java文件應該如何部署到tomcat
1、將java程序編譯成.class文件,復制到tomcat中你的項目里的相應位置。
2、現在很多開發工具可以方便的部署java程序到tomcat,比如eclipse
通過add和remove來部署你的項目,通過publish來部署項目到tomcat你所設定的位置,默認是[盤符]:workspace.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebapps
『伍』 C調用java時使用JNI的問題!急。。。。。
M,是其中的一個組成部分,更詳細的看下面:
----------------------------------
操作系統裝入jvm是通過jdk中java.exe來完成,通過下面4步來完成jvm環境.
1.創建jvm裝載環境和配置
2.裝載jvm.dll
3.初始化jvm.dll並掛界到JNIENV(JNI調用介面)實例
4.調用JNIEnv實例裝載並處理class類。
在我們運行和調試java程序的時候,經常會提到一個jvm的概念.jvm是java程序運行的環境,但是他同時一個操作系統的一個應用程序一個進程,因此他也有他自己的運行的生命周期,也有自己的代碼和數據空間.
首先來說一下jdk這個東西,不管你是初學者還是高手,是j2ee程序員還是j2se程序員,jdk總是在幫我們做一些事情.我們在了解java之前首先大師們會給我們提供說jdk這個東西.它在java整個體系中充當著什麼角色呢?我很驚嘆sun大師們設計天才,能把一個如此完整的體系結構化的如此完美.jdk在這個體系中充當一個生產加工中心,產生所有的數據輸出,是所有指令和戰略的執行中心.本身它提供了java的完整方案,可以開發目前java能支持的所有應用和系統程序.這里說一個問題,大家會問,那為什麼還有j2me,j2ee這些東西,這兩個東西目的很簡單,分別用來簡化各自領域內的開發和構建過程.jdk除了jvm之外,還有一些核心的API,集成API,用戶工具,開發技術,開發工具和API等組成
好了,廢話說了那麼多,來點於主題相關的東西吧.jvm在整個jdk中處於最底層,負責於操作系統的交互,用來屏蔽操作系統環境,提供一個完整的java運行環境,因此也就虛擬計算機. 操作系統裝入jvm是通過jdk中java.exe來完成,通過下面4步來完成jvm環境.
1.創建jvm裝載環境和配置
2.裝載jvm.dll
3.初始化jvm.dll並掛界到JNIENV(JNI調用介面)實例
4.調用JNIEnv實例裝載並處理class類。
一.jvm裝入環境,jvm提供的方式是操作系統的動態連接文件.既然是文件那就一個裝入路徑的問題,java是怎麼找這個路徑的呢?當你在調用java test的時候,操作系統會在path下在你的java.exe程序,java.exe就通過下面一個過程來確定jvm的路徑和相關的參數配置了.下面基於windows的實現的分析.
首先查找jre路徑,java是通過GetApplicationHome api來獲得當前的java.exe絕對路徑,c:\j2sdk1.4.2_09\bin\java.exe,那麼它會截取到絕對路徑c:\j2sdk1.4.2_09\,判斷c:\j2sdk1.4.2_09\bin\java.dll文件是否存在,如果存在就把c:\j2sdk1.4.2_09\作為jre路徑,如果不存在則判斷c:\j2sdk1.4.2_09\jre\bin\java.dll是否存在,如果存在這c:\j2sdk1.4.2_09\jre作為jre路徑.如果不存在調用GetPublicJREHome查HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment\「當前JRE版本號」\JavaHome的路徑為jre路徑。
然後裝載jvm.cfg文件JRE路徑+\lib+\ARCH(CPU構架)+\jvm.cfgARCH(CPU構架)的判斷是通過java_md.c中GetArch函數判斷的,該函數中windows平台只有兩種情況:WIN64的『ia64』,其他情況都為『i386』。以我的為例:C:\j2sdk1.4.2_09\jre\lib\i386\jvm.cfg.主要的內容如下:
-client KNOWN
-server KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR
在我們的jdk目錄中jre\bin\server和jre\bin\client都有jvm.dll文件存在,而java正是通過jvm.cfg配置文件來管理這些不同版本的jvm.dll的.通過文件我們可以定義目前jdk中支持那些jvm,前面部分(client)是jvm名稱,後面是參數,KNOWN表示jvm存在,ALIASED_TO表示給別的jvm取一個別名,WARN表示不存在時找一個jvm替代,ERROR表示不存在拋出異常.在運行java XXX是,java.exe會通過CheckJvmType來檢查當前的jvm類型,java可以通過兩種參數的方式來指定具體的jvm類型,一種按照jvm.cfg文件中的jvm名稱指定,第二種方法是直接指定,它們執行的方法分別是「java -J」、「java -XXaltjvm=」或「java -J-XXaltjvm=」。如果是第一種參數傳遞方式,CheckJvmType函數會取參數『-J』後面的jvm名稱,然後從已知的jvm配置參數中查找如果找到同名的則去掉該jvm名稱前的『-』直接返回該值;而第二種方法,會直接返回「-XXaltjvm=」或「-J-XXaltjvm=」後面的jvm類型名稱;如果在運行java時未指定上面兩種方法中的任一一種參數,CheckJvmType會取配置文件中第一個配置中的jvm名稱,去掉名稱前面的『-』返回該值。CheckJvmType函數的這個返回值會在下面的函數中匯同jre路徑組合成jvm.dll的絕對路徑。如果沒有指定這會使用jvm.cfg中第一個定義的jvm.可以通過set _JAVA_LAUNCHER_DEBUG=1在控制台上測試.
最後獲得jvm.dll的路徑,JRE路徑+\bin+\jvm類型字元串+\jvm.dll就是jvm的文件路徑了,但是如果在調用java程序時用-XXaltjvm=參數指定的路徑path,就直接用path+\jvm.dll文件做為jvm.dll的文件路徑.
二:裝載jvm.dll
通過第一步已經找到了jvm的路徑,java通過LoadJavaVM來裝入jvm.dll文件.裝入工作很簡單就是調用windows API函數:
LoadLibrary裝載jvm.dll動態連接庫.然後把jvm.dll中的導出函數JNI_CreateJavaVM和JNI_GetDefaultJavaVMInitArgs掛接到InvocationFunctions變數的CreateJavaVM和GetDefaultJavaVMInitArgs函數指針變數上。jvm.dll的裝載工作宣告完成。
三:初始化jvm,獲得本地調用介面,這樣就可以在java中調用jvm的函數了.調用InvocationFunctions->CreateJavaVM也就是jvm中JNI_CreateJavaVM方法獲得JNIEnv結構的實例.
四:運行java程序.
java程序有兩種方式一種是jar包,一種是class. 運行jar,java -jar XXX.jar運行的時候,java.exe調用GetMainClassName函數,該函數先獲得JNIEnv實例然後調用java類java.util.jar.JarFileJNIEnv中方法getManifest()並從返回的Manifest對象中取getAttributes("Main-Class")的值即jar包中文件:META-INF/MANIFEST.MF指定的Main-Class的主類名作為運行的主類。之後main函數會調用java.c中LoadClass方法裝載該主類(使用JNIEnv實例的FindClass)。main函數直接調用java.c中LoadClass方法裝載該類。如果是執行class方法。main函數直接調用java.c中LoadClass方法裝載該類。
然後main函數調用JNIEnv實例的GetStaticMethodID方法查找裝載的class主類中
「public static void main(String[] args)」方法,並判斷該方法是否為public方法,然後調用JNIEnv實例的
CallStaticVoidMethod方法調用該java類的main方法。
另外,虛機團上產品團購,超級便宜