我正在开发一些需要从bash运行一些外部程序的Java应用程序。
我实现这一目标的首选方法是使用ProcessBuilder
,但我遇到了一些问题。
ProcessBuilder.environment()
会返回PATH=/usr/bin:/bin:/usr/sbin:/sbin
,我猜这是真正的系统路径。
但是有一个技巧,在我的OSX机器上,这些程序安装在/usr/local/bin
下,而其他机器可以在完全不同的位置。
我可以用我的路径硬编码environment.put()
,但这并不能解决我跨平台的问题。
最好的选择是,如果有可能,copy-paste
可以PATH
重击*
吗?
你会采取哪种方式?
TL; DR
我想从ProcessBuilder执行命令,它可以在任何位置,我可以假设命令的路径在shell PATH环境中。 怎么样?
答案 0 :(得分:0)
我会选择以下其中一项:
尝试从路径执行。如果失败,则向用户报告错误,指示程序不在路径中(也显示路径)。通过这种方式,诱导用户配置他的路径,包括程序
搜索特定于您的程序的环境变量(例如,程序名称 _BINPATH)。如果找不到,请告诉用户他必须定义它。变量应指向包含二进制文件的目录
尝试执行二进制文件。如果失败,则加载配置文件(如果存在),指定它们的位置。如果无法加载配置文件,请在文件系统中搜索二进制文件(向用户报告您正在执行的操作,并且只会执行一次)并且一旦找到将其位置存储在配置文件中。< / p>