簡體   English   中英

ProcessBuilder在資源文件夾中找不到sh文件-Spring Boot

[英]ProcessBuilder cannot find sh file in resources folder - Spring Boot

我已經在互聯網上搜索了一段時間的解決方案,但是沒有一個清晰的圖像說明如何執行sh文件。

我有一個shell腳本install.sh ,它已保存在resources目錄中。 我想從ProcessBuilder運行它。 無論我嘗試什么,我都會不斷收到“無此No such file or directory錯誤。 這是我的代碼:

String masterURL = config.getMasterUrl();
String adminToken = config.getAdminToken();

ProcessBuilder installScriptBuilder = new ProcessBuilder();
installScriptBuilder.command("install.sh", dir, namespace);
installScriptBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);

Map<String,String> installEnv = installScriptBuilder.environment();
installEnv.put("URL", masterURL);
installEnv.put("TOKEN", adminToken);

try {
    Process p = installScriptBuilder.start();
} catch (IOException e) {
    e.printStackTrace();
}

我已經讀過有關在其他答案中創建臨時文件的信息,但是沒有一個文件清楚地說明如何使用該方法解決此問題。 我已經使用Spring Initializr創建了我的項目。

您可以使用“ classpath:install.sh”選擇資源文件。

在這種情況下,我們無法做到這一點。 我們需要路徑本身:

final ClassLoader classLoader = getClass().getClassLoader();
    final File file = new File(classLoader.getResource("install.sh").getFile());
    final ProcessBuilder installScriptBuilder = new ProcessBuilder();
    installScriptBuilder.command(file.getPath());

我相信這一班輪應該行得通:

installScriptBuilder.command(new ClassPathResource("install.sh").getPath());

resources文件夾未保留在目標中。 它是maven的文件夾結構。 您可能需要查看target文件夾,以了解install.sh文件所在的位置。 它可以在classpath的root上訪問。

資源位於類路徑上,通常壓縮到jar中,因此是只讀的,而不是文件系統上的File。

使用資源作為模板將其復制到文件系統。

Path path = dir.toPath().resolve("install.sh"); // dir a File
Path path = Paths.get(dir, "install.sh"); // dir a String
InputStream in = getClass().getResourceAsStream("/install.sh");
Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM