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命令列的花銷更大。
相關文章
- jar包、war包和ear包的介紹與區別JAR
- 命令列生成jar檔案命令列JAR
- 如何在一個.ear檔案中同時包含兩個.war?
- J2SE - Java命令執行class和jar檔案JavaJAR
- 在 Linux 中使用ImageMagick命令列操作影像檔案Linux命令列
- Java的WAR包檔案分析Java
- 06、使用Gradle構建的專案如何打jar包和war包GradleJAR
- Bash 單命令列解釋(1)--檔案操作命令列
- 設定ear中war之間session共享Session
- 命令列技巧:使用 find 和 xargs 查詢和處理檔案命令列
- 如何在命令列中使用 ftp 命令上傳和下載檔案命令列FTP
- shell 啟動 java jar 檔案JavaJAR
- Hadoop系列,執行jar檔案命令HadoopJAR
- vim 檔案操作命令
- java中的JAR檔案淺析JavaJAR
- JAVA 操作檔案Java
- java 檔案操作Java
- Linux檔案操作高頻使用命令Linux
- PHP怎麼使用命令列生成檔案?PHP命令列
- jar包和war包的介紹與區別JAR
- HDFS 常用檔案操作命令
- 命令列呼叫bat檔案命令列BAT
- 第二章 檔案和目錄操作命令
- 直接用 java 命令列動態生成jpg檔案 (轉)Java命令列
- maven jar包下載命令列方式MavenJAR命令列
- jar命令打包與java執行jar包JARJava
- Java檔案操作 讀寫操作Java
- Java 檔案 IO 操作Java
- Java操作Excel檔案JavaExcel
- java操作ini檔案Java
- java檔案操作大全Java
- 快速上手Linux核心命令(三):檔案和目錄操作命令Linux
- 關於Java使用MinIO檔案伺服器操作檔案Java伺服器
- jar檔案打包JAR
- Linux常用檔案操作命令Linux
- Golang命令列拷貝檔案Golang命令列
- java中jar命令詳解JavaJAR
- linux使用命令列操作ftpLinux命令列FTP