这可能是不可能的,但我想我会要求确定。我有一个批处理文件,它使用相对路径启动我的Java应用程序。 IE浏览器。我有:
应用程序\的start.bat 应用\ lib中的* .jar
我的应用程序在Application目录中创建配置文件。我的批处理脚本使用相对路径指向lib目录jar。这对我来说非常有效,因为我可以将程序移动到我想要的任何地方,它就会运行。但是现在我希望能够从命令行调用相同的应用程序,而不仅仅是从工作目录设置为Application的快捷方式。问题是我希望能够从命令行上的任何目录调用我的应用程序,现在这不起作用,因为工作目录会有所不同。
我知道我总是可以在我的应用程序中为工作目录添加另一个参数,但是我仍然需要创建一个带有应用程序硬编码路径的批处理脚本。在Java中是否有任何方法可以解决这个问题,例如获取我的主java文件所在的目录在工作目录之上?是否有启动器应用程序?
我无法将我的应用程序捆绑为jar,因为它会创建我希望与应用程序位于同一目录中的配置文件。
答案 0 :(得分:3)
考虑在start.bat中改变当前目录:
@cd /d %~dp0
java ...
这会将其更改为脚本所在的文件夹。
如果需要,pushd/popd命令也可用于保存当前目录以调用脚本。
或者可以从java中使用getClass().getProtectionDomain().getCodeSource().getLocation()
来获取jar / classes的路径。
配置路径系统属性还有与路径无关的方法:
java "-DconfigDir=%~dp0" ...
答案 1 :(得分:0)
没有便携式解决方案适用于所有情况。实际上,应用程序目录的概念并不一定有意义;例如考虑使用WebStart启动的applet和应用程序。
如果应用程序或安装目录的概念确实有意义,那么支持它的最简单方法是让应用程序的启动器/启动脚本通过特定于应用程序的-D
属性将其传递给应用程序Java代码。