我在通过java -jar my.jar运行可执行.jar文件时遇到问题。我创建了一个项目,其中包含.sh
路径下的src/main/resources/
文件。在代码中,我将其称为执行:
Process pb = new ProcessBuilder("src/main/resources/stacktrace.sh",pid, traceFilePath,timeInMin).start();
当我从Intellij运行我的应用程序时它工作得很好但是当我将它导出到可执行jar文件并尝试运行时抱怨:
Exception in thread "main" java.io.IOException: Cannot run program "src/main/resources/stacktrace.sh": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
答案 0 :(得分:1)
您在"src/main/resources/stacktrace.sh"
中使用的路径是相对于当前工作目录的。当您从源项目运行代码时,路径存在,但是当运行jar时,当前工作目录是不同的,因为您没有在源项目中运行它。因此,当您的代码尝试查找{{1}}时,它无法找到它。
例如,您的源项目可能位于:
/ myCodeProject
因此,当您运行项目时,您的路径将解析为:
/myCodeProject/src/main/resources/stacktrace.sh
当你运行你的jar时,你可能会从以下地方跑:
/选择/应用程序/对myApp
因此,您的路径将解析为:
/opt/app/myApp/src/main/resources/stacktrace.sh
并且这条路径不存在。
修改强> 根据要求,我正在添加一些关于如何纠正问题的想法。但是,您的要求并不清楚您希望文件存在的位置。它应该在罐子外吗?罐子里面?如果它在外面会位于特定的常量路径中还是相对于罐子?