当我使用.jar时,我想从不同的目录运行 java -jar PATH_TO_FILE 它将在我运行命令的目录中执行。我怎么说呢,jar将从.jar所在的目录开始。
java -jar PATH_TO_FILE
r7xajy2e1#
你不能;无论如何,不能用命令行开关。你有3个广泛的策略来解决由此引起的任何疾病:
显然,编写应用程序时假定“当前工作目录”是jar文件所在的位置。这是java代码中的一个常见错误,需要访问 png 用于在gui中呈现的图像文件,或使用一些静态信息解析txt文件。解决方法是首先不要编写这些代码—将只读资源存储在应用程序中的正确机制是将它们放在与类相同的位置:在jar中,由构建系统放置。把它们放进去 src/main/resources (假设您使用的是maven或类似的东西),并使用 YourClass.class.getResource("open.png") 去读,而不是去读 new File .
png
src/main/resources
YourClass.class.getResource("open.png")
new File
或者,如果是读/写文件,那么这些文件不应该存在于jar文件所在的位置:这是windowssim,而90年代早期的windowssim则是:不应该假定用户对可执行文件所在的位置具有写访问权限。这些文件的正确位置是在用户的主目录(可能是其子目录)中的某个地方,您可以在java中通过 System.getProperty("user.home") .
System.getProperty("user.home")
如果必须的话,可以编写一个批处理脚本或shell脚本来完成它。posix中有许多方法(如linux、mac os等)可以启动另一个目录中的进程。windows上的powershell脚本可以完成类似的任务。这很难看(并且依赖于操作系统),所以前两个选项要好得多。
1条答案
按热度按时间r7xajy2e1#
你不能;无论如何,不能用命令行开关。你有3个广泛的策略来解决由此引起的任何疾病:
修复你的错误
显然,编写应用程序时假定“当前工作目录”是jar文件所在的位置。这是java代码中的一个常见错误,需要访问
png
用于在gui中呈现的图像文件,或使用一些静态信息解析txt文件。解决方法是首先不要编写这些代码—将只读资源存储在应用程序中的正确机制是将它们放在与类相同的位置:在jar中,由构建系统放置。把它们放进去
src/main/resources
(假设您使用的是maven或类似的东西),并使用YourClass.class.getResource("open.png")
去读,而不是去读new File
.停止使用jar所在的地方作为数据存储
或者,如果是读/写文件,那么这些文件不应该存在于jar文件所在的位置:这是windowssim,而90年代早期的windowssim则是:不应该假定用户对可执行文件所在的位置具有写访问权限。这些文件的正确位置是在用户的主目录(可能是其子目录)中的某个地方,您可以在java中通过
System.getProperty("user.home")
.写剧本
如果必须的话,可以编写一个批处理脚本或shell脚本来完成它。posix中有许多方法(如linux、mac os等)可以启动另一个目录中的进程。windows上的powershell脚本可以完成类似的任务。这很难看(并且依赖于操作系统),所以前两个选项要好得多。