Java使用命令行操作JAR、WAR和EAR文件
盡管有Java IDE和大量的圖形工具能是你更容易地去查看和處理Java歸檔文件(JAR,WAR,和EAR)。但有時候我想使用jar的命令行命令去完成這些操作。 當我不得不做些重復的任務或者這些任務只是腳本的一部分時,使用命令行命令特別適合。在這篇文章里,我著重使用jar命令去創建,查看和處理Java歸檔 文件。
這篇文章主要使用JAR文件作為例子,但這些我展示的命令同樣適用于.war和.ear文件。我們需要記住,JAR格式是基于ZIP格式的,所以很多處理ZIP文件的工具都適用于JAR,WAR,和EAR文件。同樣需要記住的是jar選項類似于tar的選項。
在我的例子里,我打算去用jar歸檔和處理一些.class文件。下面的屏幕快照展示了編譯一些java源代碼文件(.Java文件) 為.class文件。這些文件的實際源碼和這次討論的內容關系不大,所以不在這展示了。我已經在這篇文章里展示了不用IDE直接使用命令行工具來編譯這些 文件。
準備一些文件在jar這個例子里使用。
下一張屏幕快照展示了我的.class文件已經被編譯了 并等待著被打包。
創建一個JAR文件
jar命令的“c”選項用來創建一個歸檔。在我運行的所有jar命令中,我喜歡使用“v”(verbose)和“f”(filename)選項。目 的是輸出更多的信息(幫助看到事情的經過和一些正確的過程)和作為命令的一部分提供適當的JAR/WAR/EAR文件名而不是在標準輸入輸出里提供。在創 建一個JAR文件時,使用“cvf”選項會創建一個指定名稱(f)的JAR文件并打印出詳細情況,不過是創建成功。
下一個屏幕快照展示了一個使用jar cvf的簡單例子。我進把我的目錄切換到“classes”目錄下,目的是使創建一個JAR跟運行jar cvf或者 jar cvf一樣簡單。所有在當前目錄下的文件和子目錄下的文件都會被打包為JAR文件。這個過程在下個屏幕快照展示。
如果我不想在運行jar命令時明確地切換我的當前目錄到最合適的目錄,我可以使用-c選項指示jar命令明確地去做到上面的效果。
列出歸檔的內容
列出(或者查看)一個JAR,WAR,或者EAR文件的內容可能是我最想使用的jar命令功能。我通常使用選項“t”(列出歸檔內容),“v” (verbose)和“f”(在命令行指定文件名)來列出文件內容。下一個屏幕快照展示了運行命令 jar tvf MyClasses.jar去查看我生成的JAR文件的內容。
提取歸檔文件的內容
有時候想在一個歸檔文件里提取出一個或者多個文件來使用或者單獨查看這些文件的內容。使用jar命令的“x”(用來提取)選項就可以做到。下一個屏 幕快照展示了使用命令 jar xvf MyClasses.jar 去提出JAR文件的所有內容。注意,原始的JAR文件原封不動,但是,現在它的內容全都可以直接獲取到。
我有時僅僅需要去查看獲取使用歸檔文件中的一個或者兩個文件。盡管我可以明確地把它們全都提取出來編輯我需要編輯的文件,就像在上面那個例子展示的 一樣。但是我想僅僅去提取我需要的少量文件。使用命令jar xvf命令就可以輕松做到。通過在文件名后指定特定的權限定名,我可以僅提取出我指定的文件。這有一個好處:我不用被我不需要的文件占滿了我的目錄并且在 我完事后不需要費心去清理無用文件。下一個屏幕快照展示了運行命令jar xvf MyClasses.jar dustin/examples/jar/GrandParent.class去提取一個單一的文件,而不是提取全部文件。
更新歸檔文件
之前的例子已經展示了提供“c”選項給jar命令去創建了一個歸檔,提供“t”選項列出歸檔內容,和提供“x”選項去提取一個歸檔內容。另一個經常 使用的功能是更新一個存在的歸檔內容,這使用jar的“u”選項來完成。下一個屏幕快照展示了創建一個叫tempfile.txt的文本文件(在DOS里 使用copy con 命令)然后使用jar uvf MyClasses.jar tempfile.txt去更新MyClass.jar并把tempfile.txt添加到JAR里
如果你想在一個已存在的歸檔里更新一個文件,我可以使用jar xvf命令來提取出那個文件,然后按照你的意圖修改它,最后使用jar uvf命令把它放回原始的JAR里。新的文件會把里面已存在的同名文件覆蓋掉。這個實現在下一個屏幕快照里有。
從歸檔文件里刪除數據
當你閱讀jar幫助手冊,Oracle jar工具描述,或者Java教程中的jar部分時, 看到從一個Java歸檔文件里刪除數據而不使用選項,你會感到驚訝。實現這種功能的一種方式是去提取出一個JAR文件的內容,刪除不要的文件,使用刪除文 件后剩下的文件去重新創建一個JAR包。但是有一個更簡單的方法就是簡單地利用Java歸檔格式基于ZIP的優勢并使用ZIP工具的刪除功能。
下一個屏幕快照展示了使用7-ZIP(在Window下)通過 7z d MyClasses.jar tempfile.txt命令從MyClass.jar刪除tempfile.txt。注意,同樣的事情在Linux可以使用zip -d MyClasses.jar tempfile.txt命令來完成。其他的ZIP支持工具用它們自己的選項。
WAR和EAR文件
在這篇文章里的所有例子都是針對JAR文件,但這些例子是處理WAR和EAR文件的。z作為一個最簡單的例子,下一個屏幕快照展示了使用命令jar uvf去更新一個新的web描述到WAR文件。文件的實際內容對這個例子的影響不大。重點是明白這:一個WAR文件可以像處理JAR文件一樣被操作。這同 樣適用于EAR文件。
其他的jar的操作和選項
在這篇文章里,我側重于“CRUD”操作(創建/讀取/更新/刪除)和一些能夠從命令行提出Java歸檔的功能。我通常使用適當的“CRUD”操作 命令(“c”,“t”,“u”)或者提取命令(“x”)和“v”(verbose)還有“f”(在命令行指定Java歸檔文件名)命令選項一起使用。 jar命令除了支持這些操作外還有“M”(控制Mainfest文件創建)和“o”(控制壓縮)命令。我還沒展示使用“i”命令為Java歸檔生成索引信 息。
處理Java歸檔文件的其額外資源
下面是我之前引用的一些資料,為了方便,我總結在這里。
- Java Tutorials: Packaging Programs in JAR Files
- Java教程:打包程序為JAR文件
- Oracle Tools Documentation on jar Command
- Oracle的JAR命令工具文檔
- jar man Page
- jar幫助手冊
總結
jar命令時相對易用的,并能夠快速的創建、查看和修改Java歸檔文件內容。熟悉這些命令行工具能為Java開發者節省時間,尤其是在進行頻繁的 重復任務或者腳本任務時。IDE和工具(特別是創建工具)對操作Java歸檔文件很有幫助,但有時使用它們比使用jar命令行的花銷更大。
來源:ImportNew - 進林