1

这可能是不可能的,但我想我会问只是为了确定。我有一个批处理文件,它使用相对路径启动我的 java 应用程序。IE。我有:

应用程序\start.bat 应用程序\lib*.jar

我的应用程序在 Application 目录中创建了一个配置文件。我的批处理脚本使用相对路径指向 lib 目录 jar。这对我来说非常有效,因为我可以将程序移动到任何我想要的地方,它就会运行。但是现在我希望能够从命令行调用同一个应用程序,而不仅仅是从工作目录设置为应用程序的快捷方式。问题是我希望能够从命令行上的任何目录调用我的应用程序,但现在这不起作用,因为工作目录会有所不同。

我知道我总是可以在我的应用程序中为工作目录添加另一个参数,但是我仍然必须创建一个批处理脚本,其中包含指向我的应用程序的硬编码路径。在 Java 中有没有办法解决这个问题,例如获取我的主 java 文件所在的目录在工作目录之上?也许有启动器应用程序?

我无法将我的应用程序捆绑为 jar,因为它会创建我希望与应用程序位于同一目录中的配置文件。

4

2 回答 2

3

考虑只更改 start.bat 中的当前目录:

@cd /d %~dp0
java ...

这会将其更改为脚本所在的文件夹。

如果需要, pushd/popd命令也可用于保留当前目录以调用脚本。

或者getClass().getProtectionDomain().getCodeSource().getLocation(),可以从 java 中使用来获取 jar/classes 的路径。

配置路径系统属性还有与路径无关的方法:

java "-DconfigDir=%~dp0" ...
于 2012-09-28T13:09:58.680 回答
0

没有适用于所有情况的便携式解决方案。事实上,应用程序目录的概念并不一定有意义。例如,考虑使用 WebStart 启动的小程序和应用程序。

如果应用程序或安装目录的概念确实有意义,那么支持它的最简单方法是让应用程序的启动器/启动脚本通过应用程序特定-D属性将其传递给应用程序 Java 代码。

于 2012-09-28T13:22:58.963 回答