【问题标题】:How to tell mac executable to pick up jar from current directory如何告诉 mac 可执行文件从当前目录中获取 jar
【发布时间】:2020-11-15 03:10:11
【问题描述】:

我有 Mac 可执行文件,其中包含以下几行

#! /bin/bash
java -jar <absolute_path>/jar_file.jar

如果我们上面没有提到绝对路径,据我所知,它会在 mac 用户目录中搜索,并会给出“无法访问 jar”的错误,所以为了避免这种情况,我们给出了绝对路径,但绝对路径无济于事当您将可执行文件移动到另一台机器时。

那么如何让可执行文件在任何地方都可以工作,而无需每次移动时都修改上述路径

【问题讨论】:

    标签: java macos executable executable-jar


    【解决方案1】:

    在 Unix 系统中,波浪号 (~) 字符是用户主目录的快捷方式。 ~ 字符可用于替换用户主目录的绝对路径。

    使用 ~ 的工作示例:

    #! /bin/bash
    java -jar ~/jar_file.jar
    

    用户家在不同的系统上可以有不同的绝对路径, 但上述脚本中的 ~ 将解析为正确的用户主目录路径。

    【讨论】:

    • 如果我将可执行文件放在任何文件夹中,这会起作用吗?因为你提到〜代表用户主目录..意味着可执行文件应该在 users// ?
    【解决方案2】:

    这会将 ABS 解析为您的脚本目录的完整路径(在 GNU/Linux 上),我不确定“cd -P”是否适用于 Mac OS bash 但这里是:

    #!/bin/bash
    ABS=$(cd -P $(dirname $0) ; pwd)
    
    java -jar $ABS/xyz.jar
    

    如果脚本是符号链接则不起作用。

    【讨论】:

      【解决方案3】:

      您可以从mvn 脚本中窃取相应的代码:

      ## resolve links - $0 may be a link to Maven's home                             
      PRG="$0"                                                                        
                                                                                      
      # need this for relative symlinks                                               
      while [ -h "$PRG" ] ; do                                                        
        ls=`ls -ld "$PRG"`                                                            
        link=`expr "$ls" : '.*-> \(.*\)$'`                                            
        if expr "$link" : '/.*' > /dev/null; then                                     
          PRG="$link"                                                                 
        else                                                                          
          PRG="`dirname "$PRG"`/$link"                                                
        fi                                                                            
      done                                                                            
                                                                                      
      saveddir=`pwd`
      

      PRG 将等于“/executable.bash”; JAR 将位于

      `dirname $PRG`/jar_file.jar
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-18
        • 2011-02-19
        • 2017-04-20
        • 2018-03-26
        • 2017-04-05
        • 2011-01-23
        • 2013-09-03
        • 1970-01-01
        相关资源
        最近更新 更多