【问题标题】:running nashorn using Shebang does not accept -cp option使用 Shebang 运行 nashorn 不接受 -cp 选项
【发布时间】:2015-01-31 13:28:43
【问题描述】:

我正在尝试使用带有 -cp 选项(java 版本“1.8.0_31”)的 Nashorn Shebang 脚本将一个类放入 jar 中。但是它不起作用。我已经进行了一些测试。以下 shebang 行有效:

  • #!/usr/bin/jjs -scripting
  • #!/usr/bin/jjs -fv(返回 nashorn 完整版 1.8.0_31-b13)

而以下不是:

  • #!/usr/bin/jjs -cp ./some/lib/lib.jar 将返回以下错误消息:“-cp ./some/lib/lib.jar”不是可识别的选项.
  • #!/usr/bin/jjs -scripting -fv 将返回错误消息:"-scripting -fv" 不是一个可识别的选项。使用“-h”或“-help”查看所有支持选项的列表”

所有选项在理论上都是有效的。 classpath 选项也应该像在 http://www.adam-bien.com/roller/abien/entry/setting_the_classpath_for_nashorn 上看到的那样工作。 更多关于 nashorn 和 Shebang 的信息:http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/shell.html#CHDEGHJJ

【问题讨论】:

    标签: java java-8 nashorn


    【解决方案1】:

    您遇到了一个与 Nashorn 或 Java 无关的问题。根据this answer,从未明确指定使用shebang处理命令行参数,将第一个空格之后遇到的所有内容视为一个参数似乎是一种常见的行为。

    因此,一种解决方案是编写一个 shell 脚本,其中包含对 jjs 的调用以及实际参数,并将该 shell 脚本用作 Nashorn 脚本的 shebang 行中的解释器。

    【讨论】:

      【解决方案2】:

      您可以在 shebang 脚本中使用 -Dnashorn.args=-cp。另见https://bugs.openjdk.java.net/browse/JDK-8072138

      【讨论】:

        【解决方案3】:

        您似乎想要一种自动将 JAR 添加到类路径的方法,我将重点介绍我编写的一个小包装器,它允许您定义要添加到类路径的 Maven 坐标依赖项(包括传递性)您的脚本,因此您可以使用“# dep”行编写脚本:

        #!/usr/bin/env jjs-with-deps
        #
        # The line below is parsed by the jjs-with-deps script to build a new
        # classloader in which the script is really executed, including logback
        # and its transitive dependencies.
        #
        # dep:ch.qos.logback:logback-classic:1.1.2
        
        var log = org.slf4j.LoggerFactory.getLogger("com.example.app.Logger");
        log.info("Hello World!");
        

        它确实需要将 Maven 安装在 PATH 中的某个位置,并且确实会稍微增加启动时间(但话又说回来,您已经在启动 JVM 了;)。在将任何依赖项下载到本地 M2 存储库时,首次调用给定脚本会慢得多。

        链接是https://github.com/stevestorey/jjs-with-deps

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-01
          • 2018-05-02
          • 2013-12-28
          • 1970-01-01
          • 2013-12-12
          • 2010-10-11
          • 2023-03-31
          • 1970-01-01
          相关资源
          最近更新 更多