java - 如何从任何目录引用文件

标签 java shell path cygwin

我遇到以下情况。

我有一个打包在 jar 文件中的 java 程序。如果我调用 java -jar myProgramm.jar 一切正常。该文件正在从 build.xml (ant 文件)读取一些值。该文件与 myProgramm.jar 位于同一目录中。 在我们公司,我们将所有内容包装在 shell 脚本中,以便以一种不受限的方式调用我们的脚本。

所以我的 shell 脚本 myProgrammWrapper.sh 看起来像这样:

    #!bin/bash
java -jar $(cygpath -w ~/path/to/tools/myProgramm.jar) "$@"

之所以有cygpath命令,是因为sh是在cygwin中执行的,否则找不到路径。 “$@”将参数传递给程序。

问题如下:

我们的 cygwin 环境已设置为我可以从每个目录调用 myProgrammWrapper.sh。但是当然,当我从任何随机位置调用它时,都找不到 build.xml。

有没有办法在shell脚本中引用build.xml。它位于~/path/to/tools/

首先,我正在考虑将构建文件复制到当前目录,然后将其删除。这工作得很好,但有一个根本性的缺陷。我们经常使用 ant 并拥有 build.xml 文件。因此,如果有人在已经存在 build.xml 文件的目录中执行 myProgrammWrapper.sh 。它将被覆盖。

也许这个问题可以从Java方面解决。如有任何想法和意见,我们将不胜感激。

最佳答案

为什么不让 Bash 脚本将工作目录更改为包含 XML 文件的位置?

尝试:

(cd $(cygpath -w ~/path/to/tools/) && java -jar $(cygpath -w ~/path/to/tools/myProgramm.jar) "$@")

关于java - 如何从任何目录引用文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21901462/

相关文章:

c# - c# 可以理解这种指向文件的路径吗?

java - 如何从 Java 中的套接字获取客户端名称?

Java Jersey 2 : standalone?

java - 撒克逊 XSLT 转换 : How to close outputstream when failing during transformation

linux - 通过标准输入从 shell 脚本提交多个文件

bash - emacs 终端 bash (PS1) 提示重复

linux - Shell 脚本文件观察器并发性

c - 使用 ShellExecuteEx 永久设置路径变量

powershell - 如何更新 Windows 最新托管运行程序的 github 操作工作流文件中的 PATH

java - 在 List<? 上使用 addAll()扩展 E> a 和 b 不起作用