我有一个jar文件,我没有源代码但想要使用。
jar文件提示读取文件,并使用输入文件的组合和一些用于数据的“帮助”文件生成输出文件。如果从预期的主目录运行它,它的工作非常好,但我正在尝试编写一个允许从任何地方运行jar的脚本。
问题是,如果我尝试从其他任何地方运行jar文件,那么它的主目录就无法找到正确生成数据所需的支持文件。
如果我从预期的主目录运行该文件,我必须提供输入文件的完整地址,否则它将无法找到它。我更愿意只给出相对路径,Java知道查看调用我脚本的人所在的目录。
有没有办法让bash脚本将命令行参数传递给Java,以确保此jar查看两个相关目录(帮助程序文件的目录和调用脚本的人的当前目录)在尝试解析相对文件路径时?像-classpath
参数那样的东西?
答案 0 :(得分:0)
使用--classpath
(或-cp
),您可以告诉您的Java程序应该在何处使用依赖项类。所以,可能如果您喜欢 files目录
$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
<强> UPDATE2 强>:
正如我在评论中所写,您可以尝试symlinks
。在原始目录中执行以下命令 :
ln -s /path/to/the/files/directory datafiles
$JAVA_HOME/bin/java My.class datafiles/myfile.txt
答案 1 :(得分:-1)
抱歉 - 忽略。我错过了你问题的第一行。
您可以将两个路径作为参数传递给jar文件 - 然后在运行时附加路径位置。有很多方法可以做到这一点:
java -DdirectoryA="/somewhere" -DdirectoryB="/elsewhere" -jar program.jar
并在您的代码中
String pathA = System.getProperty("directoryA");