【问题标题】:Executing jar with relative path from script使用脚本中的相对路径执行 jar
【发布时间】:2015-02-15 15:26:50
【问题描述】:

我正在尝试使用 MacOS“调度程序”launchd 执行一些 Java 代码。

我的 plist 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>net.nathangrigg.archive-tweets</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/ie54553/Desktop/MyProject/script.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>

    <key>StandardOutPath</key>
    <string>/tmp/out.out</string>
    <key>StandardErrorPath</key>
    <string>/tmp/err.out</string>
</dict>
</plist>

脚本.sh:

/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/bin/java -jar /Users/ie54553/Desktop/MyProj/classes/artifacts/jarFile_jar/Application.jar

问题是,我在程序中的所有相对路径(资源路径、属性、日志位置、spring bean 文件等)都失败了。

plist 文件位于根文件夹下,因此我假设所有路径都是相对于执行器位置的。

【问题讨论】:

  • 路径是相对于当前目录的。您可以在脚本中使用 cd 命令更改当前目录。
  • script.sh 位于项目目录中。问题是 plist 文件(launchd 配置)位于 /Library/LaunchDaemons .. 下,他是启动流程的人。
  • @lgal 当前目录不依赖于您正在运行的脚本所在的位置。您只需将cd 放入任何目录,使其成为当前目录,然后在任何其他目录中运行任何脚本,该脚本将在当前目录中运行。
  • 你说的“他们都失败了”是什么意思?

标签: java relative-path launchd


【解决方案1】:

如果路径以“/”开头,则将其视为绝对路径并被视为绝对路径。 '/' 下是否有 'tmp' 目录(并具有写访问权限)?如果没有,请尝试使用 'tmp' 而不是 '/tmp'。

来自docs

对于 UNIX 平台,绝对路径名的前缀始终是“/”。相对路径名没有前缀。表示根目录的抽象路径名具有前缀“/”和一个空的名称序列。

【讨论】:

    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 2014-07-23
    • 2017-12-31
    • 2016-07-08
    • 2019-06-24
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    相关资源
    最近更新 更多