1

我有一个 jar 文件,我没有源代码但想使用它。

jar 文件提示要读取的文件并使用输入文件和它用于数据的许多“帮助”文件的组合生成输出文件。如果从其预期的主目录运行,它工作得非常好,但我正在尝试编写一个脚本,允许从任何地方运行 jar。

问题是,如果我尝试从其主目录以外的任何地方运行 jar 文件,它将无法找到正确生成其数据所需的支持文件。

如果我从其预期的主目录运行该文件,我必须提供输入文件的完整地址,否则它将找不到它。我希望能够只提供相对路径,并且 Java 知道查看调用我的脚本的人所在的任何目录。

有没有一种方法可以让 bash 脚本将命令行参数传递给 Java,以确保该 jar 在尝试时查看两个相关目录(帮助文件的目录和调用脚本的人的当前目录)解析相对文件路径?类似-classpath论点的东西?

4

2 回答 2

0

使用--classpath(或-cp),您可以告诉您的 Java 程序应该将依赖类放在哪里。所以,如果你喜欢在你的文件目录中

$JAVA_HOME/bin/java -cp '.:/path/to/the/original/program' My.class myfile.txt

然后它将缠绕程序,并找到您的文件。

更新

如果它不起作用,您可以尝试以其他方式强制加载文件。Javadoc 说:

默认情况下,java.io包中的类总是根据当前用户目录解析相对路径名。此目录由系统属性命名,user.dir通常是调用 Java 虚拟机的目录。

因此,您可以尝试以这种方式从原始目录运行程序:

$JAVA_HOME/bin/java -Duser.dir=/path/to/the/files/directory My.class myfile.txt

更新2

正如我在评论中所写,您可以尝试symlinks. 在原目录中执行以下命令:

ln -s /path/to/the/files/directory datafiles

$JAVA_HOME/bin/java My.class datafiles/myfile.txt
于 2013-01-29T17:16:21.820 回答
-1

对不起 - 忽略。我错过了你问题的第一行。


您可以将这两个路径作为参数传递给 jar 文件 - 然后在运行时附加路径位置。有很多方法可以做到这一点,这里有一个:

java -DdirectoryA="/somewhere" -DdirectoryB="/elsewhere" -jar program.jar 

在你的代码中

String pathA = System.getProperty("directoryA");
于 2013-01-29T16:56:30.473 回答