2017-07-25 59 views
0

運行Java 1.8.0_141。也遇到1.8.0_121的問題。我使用JAR命令在批處理文件中解壓WAR的FileNotFoundException

運行下面的命令來提取WAR的內容到一個臨時目錄:

mkdir temp 
cd temp 
%JAVA_HOME%\bin\jar -xvf ..\petclinic_sdk.war 

,我使用可以在這裏找到的petclinic_sdk示例項目:https://github.com/spring-projects/spring-petclinic

這似乎提取一切正常,但似乎嘗試提取WAR中包含的庫。我得到這個錯誤:

java.io.FileNotFoundException: org.springframework.web.servlet-3.0.5.RELEASE.jar 
(The system cannot find the file specified) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at sun.tools.jar.Main.run(Main.java:261) 
    at sun.tools.jar.Main.main(Main.java:1288) 

這JAR生活/temp/WEB-INF/lib/org.springframework.web.servlet-3.0.5.RELEASE.jar後提取。

問題是我需要臨時目錄清理臨時文件。因爲它似乎也試圖提取這些JAR,/ temp已滿jartmp ******************。tmp文件:temp directory after extraction

想法?

+0

不能與Java 1.8.0_25重現。 'jar'命令不是遞歸的。您必須使用不同的命令行。 – EJP

回答

0

我的錯誤。包含上面代碼的循環是遞歸的。

工作代碼在這裏:

@echo off 
setlocal EnableDelayedExpansion 

for %%i in (*) do (
    if %%~xi == .jar (
     rem ... 
    ) 
    if %%~xi == .war (
     set foo=%%~ni%.war 
     mkdir temp 
     cd temp 
     %JAVA_HOME%\bin\jar -xvf ..\!foo! 
     rem ... 
    ) 

    if %%~xi == .ear (
     rem ... 
    ) 
)