【问题标题】:Start executable jar with scripts on multiple operating systems在多个操作系统上使用脚本启动可执行 jar
【发布时间】:2012-06-26 00:59:44
【问题描述】:

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

因此,我需要编写两个脚本(如果有人知道如何使用 Mac 和 Windows 的单个脚本来做到这一点,那就太棒了)通过在 Mac 和 Windows 上双击来自动启动我的可执行 jar .如果 Java 安装正确,脚本应该可以正常工作。如果没有安装 Java,那么他们应该知道得更好。

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

start javaw -jar ExecutableProgram.jar

但是,我不确定要为 Mac 机器制作什么样的脚本。 我应该使用什么类型的脚本?

AppleScript?嘘? 它需要能够通过双击执行。

【问题讨论】:

  • 由于 IzPack 中的 标签不起作用,因此不可能有一个脚本,在双击时将运行可执行 jar。在 Windows 中可以使用上面的批处理脚本。

标签: shell applescript executable-jar


【解决方案1】:

在 Mac OS X 上,双击一个 Jar 应该会自动打开它。但是,我没有很好的方法来测试它;因为我是一名开发人员,所以我的计算机做了很多特殊的事情 :-) 特别是,Apple 自己的 Java 运行时在 10.6 中已被弃用,我不知道其他 Java 运行时附带了哪些工具。不过,如果这种方法有效(我认为它会有效),那将是最好的选择。

如果这不起作用,下一个最好的选择是使用 AppleScript,如 adayzdone 建议的那样。我将使用的 AppleScript 将改为:

do shell script (¬
  "cd " & quoted form of POSIX path of (path to me) & "/.. ; " & ¬
  "java -jar ExecutableProgram.jar")

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

  • 如果命令的命令行输出不重要,请将 AppleScript 第三行的字符串更改为"java -jar ExecutableProgram.jar &>- &"&>- 关闭输出流,& 在背景。 (只是 & 不起作用。)
  • 更多涉及的方法不会退出 AppleScript,只是将其隐藏:
    • 按住 Control 并单击您的 AppleScript 应用程序并选择“显示包内容”
    • 导航到Contents/ 文件夹并打开Info.plist
    • 将键 LSUIElement 添加到值 true
      • 如果是纯文本 XML 格式(不是二进制格式),可以添加 <key>LSUIElement</key><true/>
      • 在命令行中,这是defaults write /full/path/to/Info LSUIElement -bool true(请注意,您需要以/ 开头的完整路径,例如通过使用"$(pwd)/Info" 获得,但您可以't 提供 .plist 扩展名)。
      • 您还可以使用 Apple 的“Property List Editor”应用程序,该应用程序(至少曾经)与开发人员工具一起提供;也有免费的第三方属性列表编辑器。

如果这不起作用,那么最简单的处理这种事情的方法是编写一个 Unix shell 脚本而不是 Windows 批处理脚本。它必须使用 .command 扩展名保存,并设置其可执行位 (chmod +x file.command)。内容应该是

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

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

【讨论】:

  • 嗯,希望我可以从 IzPack 运行 chmod 命令以使脚本可执行,否则将无法满足要求。不过,非常感谢您对两者的深入解释。此外,由于脚本位于同一目录中,因此不需要 cd 命令。
  • @CODE:实际上,.command 文件是从用户主目录运行的。双击foo.command 打开一个shell 并运行(在那个shell 中)/path/to/foo.command ; exit。我想你也可以使用java -jar "$(dirname "$0")/ExecutableProgram.jar。我从未使用过 IzPack,但the FAQ 似乎表明您可以使用<executable type="bin" stage="..." targetfile=".../foo.command" os="mac" /> 使文件可执行。
  • 啊,我以为它类似于 shell 脚本。不幸的是,IzPack 有很多错误,我尝试了 标记,但无论我更改了哪些条件变量,它都没有使文件可执行。看起来客户只需要在 Mac 上解决。
【解决方案2】:

虽然我不确定 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

【讨论】:

  • 这可能是我正在寻找的,可以将其保存到文件并在双击时自动运行吗?还是需要先保存为应用程序?抱歉,我对 AppleScript 知之甚少。
  • 此外,该脚本将与 ExecutableProgram.jar 放置在同一文件夹中,那么与您上面使用的目录结构相比,它看起来如何?这个程序安装在不同类型的系统上,所以我并不总是知道目录结构。
  • 如果您不将脚本保存为应用程序,则必须从脚本编辑器运行它。有两种方法可以输入正确的 posix 路径。您可以将目标文件夹拖到脚本(在脚本编辑器中打开)或按照 Antal 的建议,将文件夹设置为(文件(我的路径)容器的别名)的 POSIX 路径
猜你喜欢
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
  • 2015-06-14
  • 2017-02-18
  • 2018-12-18
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
相关资源
最近更新 更多