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。
添加回答
举报