Shell 在多个操作系统上使用脚本启动可执行jar

Shell 在多个操作系统上使用脚本启动可执行jar,shell,applescript,executable-jar,Shell,Applescript,Executable Jar,我用Java编写了一个程序,有一个可执行的jar,客户需要在Windows或Mac机器上打开它。我的一些客户是。。。不是电脑人 因此,我需要编写两个脚本(如果有人知道如何在Mac和Windows上使用一个脚本,那将是惊人的),以便通过双击Mac和Windows自动启动我的可执行jar。如果Java安装正确,脚本应该可以正常工作。如果没有安装Java,那么他们应该更清楚 这是我的Windows计算机批处理脚本: start javaw -jar ExecutableProgram.jar 然而,

我用Java编写了一个程序,有一个可执行的jar,客户需要在Windows或Mac机器上打开它。我的一些客户是。。。不是电脑人

因此,我需要编写两个脚本(如果有人知道如何在Mac和Windows上使用一个脚本,那将是惊人的),以便通过双击Mac和Windows自动启动我的可执行jar。如果Java安装正确,脚本应该可以正常工作。如果没有安装Java,那么他们应该更清楚

这是我的Windows计算机批处理脚本:

start javaw -jar ExecutableProgram.jar
然而,我不确定该为Mac电脑编写什么样的脚本我应该使用什么类型的脚本?


苹果书?嘘它需要能够通过双击执行。

虽然我不确定java命令,但您可以将此AppleScript保存为应用程序,以便在双击时运行

set theFolder to quoted form of "/Users/CODe/Desktop/yourFolder"
    do shell script "cd " & theFolder & " ; java -jar ProfessionalMediator.jar"
您还可以通过保存为应用程序的AppleScript在终端中执行此操作:

tell application "Finder" to set theFolder to POSIX path of (file (path to me)'s container as alias)
tell application "Terminal"
    activate
    do script "cd " & theFolder & " ; java -jar ProfessionalMediator.jar" in window 1
end tell

在MacOSX上,双击Jar会自动打开它。然而,我没有一个好的方法来测试这一点;由于我是一名开发人员,我的计算机做了很多特殊的事情:-)特别是,苹果自己的Java运行时从10.6开始就被弃用了,我不知道其他Java运行时附带了什么工具。尽管如此,如果这种方法奏效(我认为它会奏效),那么它是最好的选择

如果这不起作用,下一个最好的办法就是使用AppleScript,就像建议的那样。我将使用的AppleScript是:

do shell script (¬
  "cd " & quoted form of POSIX path of (path to me) & "/.. ; " & ¬
  "java -jar ExecutableProgram.jar")
引用形式的…
位获取脚本的路径(
路径到me
),将其转换为Unix路径(
POSIX路径的…
),并为shell引用特殊字符(
引用形式的…
);由于脚本在目录中运行,因此还需要
/..
来访问Jar所在的父目录。要使其可双击,请将文本复制并粘贴到AppleScript编辑器中,然后在“保存…”对话框中,将文件格式设置为“应用程序”。(要编辑它,请从AppleScript编辑器内部打开应用程序。)这种方法的缺点是,您将运行两个应用程序:true Java应用程序和Mac shell。有两种解决方法:

  • 如果命令的命令行输出不重要,请将AppleScript第三行上的字符串更改为
    “java-jar ExecutableProgram.jar&>-&”
    &>-
    关闭输出流,并在后台运行它。(只是
    不起作用。)
  • 更复杂的方法不是退出AppleScript,而是隐藏它:
    • 控件单击AppleScript应用程序并选择“显示软件包内容”
    • 导航到
      Contents/
      文件夹并打开
      Info.plist
    • 使用值
      true
      添加键
      LSUIElement
      • 如果它是纯文本XML格式(不是二进制格式),则可以添加
        LSUIElement
      • 在命令行中,这是
        默认的write/full/path/to/Info LSUIElement-bool true
        (请注意,您需要以
        /
        开头的完整路径,例如使用
        “$(pwd)/Info”
        ,但您不能提供
        .plist
        扩展名)
      • 您还可以使用苹果的“属性列表编辑器”应用程序,该应用程序(至少以前)随开发人员工具提供;免费的第三方属性列表编辑器也存在
如果这不起作用,最简单的方法就是编写一个unixshell脚本,而不是Windows批处理脚本。它必须以
.command
扩展名保存,并设置其可执行位(
chmod+x file.command
)。内容应该是

#!/bin/sh
cd "$(dirname "$0")"
java -jar ExecutableProgram.jar

(如果您不熟悉Unix shell脚本:第一行声明这是一个shell脚本;第二行进入shell脚本所在的目录;第三行执行相关操作。)这种方法不太可取的原因是它将打开终端(OS X的命令行界面);您将获得一个窗口,该窗口将一直打开,直到脚本终止;当脚本终止时,所述窗口不会(或可能不会)关闭;终端不会自行退出。因此,它更明显是一个二等公民。

这可能就是我要找的,它能保存到文件中并在双击时自动运行吗?还是需要先将其保存为应用程序?抱歉,我对AppleScript知之甚少。另外,该脚本将与ExecutableProgram.jar放在同一文件夹中,那么与上面使用的目录结构相比,它看起来如何?此程序安装在不同类型的系统上,因此我不总是知道目录结构。如果不将脚本保存为应用程序,则必须从脚本编辑器中运行它。有两种方法可以输入正确的posix路径。您可以将目标文件夹拖到脚本(在脚本编辑器中打开)中,或者按照Antal的建议,将文件夹设置为POSIX path of(file(path to me)的容器别名)Hmm,希望我可以从IzPack运行chmod命令,使脚本可执行,否则将无法满足要求。不过,非常感谢您对这两个问题的深入解释。另外,由于脚本位于同一目录中,因此不需要cd命令。@CODe:实际上,.command文件是从用户主目录运行的。双击
foo.command
打开一个shell并运行(在该shell中)
/path/to/foo.command;退出
。我想您也可以使用
java-jar“$(dirname“$0”)/ExecutableProgram.jar
。我从未使用过IzPack,但似乎表明您可以使用
使文件可执行。啊,