2 回答
TA貢獻1831條經驗 獲得超9個贊
這與 JAR 文件的執行權限無關。實際上,JAR 文件只需要可讀即可。
如果您的問題的標題是準確的,這與 Java 程序是否能夠讀取和執行您正在談論的shell 腳本有關:
shell 腳本本身必須可由試圖運行它們的有效用戶執行。例如,腳本本身需要設置相關的執行位。
shell 腳本的路徑需要從根目錄一直讀取(由有效用戶......)。(或當前目錄,如果您使用的是相對于點的相對路徑名?;蛘吣夸?$PATH ... 如果您使用的是簡單的命令名稱。)
奇怪的是,這段代碼根本不是試圖運行 shell 腳本。那是一個簡單的java命令。不涉及 shell 腳本。
如果失敗并出現“權限被拒絕”錯誤,則該java命令不可執行,或者 JAR 文件不可讀。
我認為您需要向我們提供更多信息;例如所有相關的輸出、真實的代碼和真實的文件/目錄名稱和權限。
我的程序首先嘗試導航(通過 CD)到包含 JAR 文件本身的目錄:
我假設您意識到您的嘗試:
String[] cd = {jarDirectory.getAbsolutePath(), "cd"};
Runtime.getRuntime().exec(cd);不起作用。它更改子進程的當前目錄,但這對父進程或您運行的下一個子進程沒有影響。您應該使用ProcessBuilder它directory(File),特別是它可用于為子進程選擇不同的當前目錄。
這意味著您可能位于錯誤的目錄中,這可能會導致“權限被拒絕”問題。
TA貢獻1876條經驗 獲得超6個贊
我不知道為什么這會導致權限被拒絕,但這應該是
String[] jarCommand = {"java", "-jar", "some-jar-SNAPSHOT.jar"};否則,exec 調用將查找名為“java -jar some-jar-SNAPSHOT.jar”的可執行文件,盡管我希望這會導致 ENOENT 而不是 EPERM。
添加回答
舉報
